1

在 Ruby 中,为什么你可以这样写:

# b is not defined yet.
#
if b = true
  a = b
end
# => a = true

但不是单线:

a = b if b = true
# => NameError: undefined local variable or method `b' for main:Object
4

1 回答 1

4

因为 Ruby 解释器在看到赋值时会“创建”一个局部变量。

在第二种情况下,它还没有看到赋值,所以在解析表达式时变量不存在。

更准确地说,一个方法首先被解析成一个内部表示,然后,也许代码最终会被调用并实际执行。

在该解析过程中“创建”变量。这实际上更像是一个声明的问题,它只是意味着解释器会意识到它们。在有人调用周围的方法之前,它们不会在被赋予空间或值的意义上被创建。

于 2012-11-21T17:00:45.807 回答