Ruby语法奇怪
可能重复:
条件语句并在ruby中赋值
在重构一些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
。
这是由于行的解析和执行时间。 在第一个版本中,解析并设置值,然后评估puts。 在第二行中,当解析器获取变量puts value
,尚未定义它。 换句话说,它不能运行该行来设置变量,直到它首先解析该行。