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 ,尚未定义它。 换句话说,它不能运行该行来设置变量,直到它首先解析该行。