0

可能重复:
红宝石中的条件语句和赋值

在重构一些 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)。我以为这些表达是平等的?如果在 puts 之前评估 if 块,则value不应未定义。

4

1 回答 1

4

这是由于行的解析与执行时间的关系。在第一个版本中,值被解析和设置,然后对 puts 进行评估。在第二行中,当解析器到达变量puts value时,它还没有被定义。换句话说,它不能运行该行来设置变量,直到它首先解析该行。

于 2012-07-25T12:34:46.547 回答