在一行条件中分配未定义的变量

时间:2012-11-21 16:57:09

标签: ruby

在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

1 个答案:

答案 0 :(得分:4)

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

在第二种情况下,它尚未看到赋值,因此在解析表达式时该变量不存在。

更准确地说,首先将方法解析为内部表示,然后,最终可能会调用并实际执行代码。

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