Ruby类方法行为疑问:传入0作为参数为何返回nil?
为什么调用Ruby类方法
a传入0会返回nil? 嘿,这个问题其实挺典型的,咱们先从Ruby的方法返回规则和常见的代码场景说起~
首先,我猜你的代码大概是类似这样的(这是遇到这类问题最常见的写法):
class MyClass def self.a(number) if number > 0 "大于0的数" elsif number < 0 "小于0的数" end end end # 调用测试 puts MyClass.a(0) # 输出 nil
核心原因:Ruby方法的返回值规则
在Ruby里,方法会默认返回最后一条执行的表达式的结果,如果方法里没有任何分支被执行(或者最后一条语句没有明确的返回值),就会返回nil。
当你传入0的时候:
number > 0不成立,跳过第一个if分支number < 0也不成立,跳过elsif分支- 整个方法没有进入任何代码块,相当于没有执行任何有返回值的表达式,所以默认返回
nil
怎么修复?
只需要补上覆盖0的分支就行,比如加上else:
class MyClass def self.a(number) if number > 0 "大于0的数" elsif number < 0 "小于0的数" else "等于0的数" # 明确处理0的情况 end end end puts MyClass.a(0) # 现在会输出 "等于0的数"
或者更简洁的写法,用case语句:
class MyClass def self.a(number) case number when 0 then "等于0的数" when 1..Float::INFINITY then "大于0的数" when -Float::INFINITY..-1 then "小于0的数" end end end
这样就能确保所有输入情况都有对应的返回值,不会再出现nil啦~
内容的提问来源于stack exchange,提问作者Mayuresh Srivastava
相关产品推荐
相关产品推荐

