Ruby语法奇怪

时间:2012-07-25 12:21:44

标签: ruby

  

可能重复:
  conditional statement and assigning value in 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不应该是未定义的。

1 个答案:

答案 0 :(得分:4)

由于行的解析和执行时间。在第一个版本中,解析并设置值,然后评估puts。在第二行中,当解析器到达变量puts value时,它尚未定义。换句话说,它可以运行该行来设置变量,直到它首先解析该行。