在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
答案 0 :(得分:4)
因为Ruby解释器在看到赋值时“创建”了一个局部变量。
在第二种情况下,它尚未看到赋值,因此在解析表达式时该变量不存在。
更准确地说,首先将方法解析为内部表示,然后,最终可能会调用并实际执行代码。
在解析过程中“创建”变量。这实际上更多的是声明问题,它只是意味着解释器会意识到它们。在被某人调用周围方法之前,它们不会被赋予空间或值的意义。