我确信这种行为是有原因的,我只是好奇它是什么。
y = x # NameError: undefined local variable or method 'x'
x = x # => nil
答案 0 :(得分:6)
这是由Ruby中的变量初始化方式引起的,这对于这种语言来说是独一无二的。基本上,Ruby初始化(创建)一个变量,如果它可能被赋值一个。考虑这个例子:
if false
x = "hello"
end
x
绝对不会在此处分配"hello"
字符串。但是,它仍将使用nil
进行初始化,如同静态程序分析一样,它可能已被分配。
你的例子很相似。因为您为x
分配了一些内容,所以在执行语句之前,它将使用nil
进行初始化。因此,在执行期间,x
实际上是nil
。