在重构某些rails代码时,我在ruby中遇到了一些语法怪异。
给出以下方法
def get_value
42
end
为什么这样做?
if value = get_value
puts value
end
虽然这不是吗?
puts value if value = get_value
后者出错:undefined local variable or method `value' for main:Object (NameError)
。我以为这些表达是平等的?在put之前评估if-block时,value
不应该是未定义的。
答案 0 :(得分:4)
由于行的解析和执行时间。在第一个版本中,解析并设置值,然后评估puts。在第二行中,当解析器到达变量puts value
时,它尚未定义。换句话说,它可以运行该行来设置变量,直到它首先解析该行。