在这个例子中,方法定义中的最后一个english
似乎对我来说是不必要的。我把它拿出来,代码工作得很好。为什么这本书包括它?是否有某种我不知道的惯例?
class Integer
def to_eng
if self == 5
english = 'five'
else
english = 'fifty-eight'
end
english
end
end
# I'd better test on a couple of numbers...
puts 5.to_eng
puts 58.to_eng
答案 0 :(得分:2)
在ruby中,始终从函数返回最后一个语句的结果。在这种情况下,结果是'english'变量的值。但是,如果我们删除方法的最后一行,它仍然表现相同,因为两行都返回在'english'变量上设置的值。
english = 'five' #=> 'five'
english = 'fifty-eight' #=> 'fifty-eight'
此方法也可以使用三元运算符以更紧凑和更优雅的方式编写。
class Integer
def to_eng
self == 5 ? 'five' : 'fifty-eight'
end
end
答案 1 :(得分:2)
对我来说,最好的理由是可调试性。在展示的代码中,您可以在返回之前插入调试语句,并知道结果:
class Integer
def to_eng
if self == 5
english = 'five'
else
english = 'fifty-eight'
end
debugger
# or: puts "ENGLISH IS #{english}"
# or: binding.pry
# or whatever else you want
english
end
end
如果您不使用最后一个english
,则无法执行此操作,因为返回值会发生变化。
答案 2 :(得分:0)
它确保了本地变量' english'退回。方法中最后执行的语句是返回的内容。
在这种情况下,不需要它,但如果(例如)该方法被重写为...
def to_eng
english = 'fifty-eight'
english = 'five' if self == 5
end
...你会发现除了5以外的任何数字都没有返回任何数字,因为最后一个语句......没有被执行......只会返回nil。