为什么即使x未定义,x = x也不会引发错误

mec*_*ish 5 ruby

可能重复:
为什么Ruby中的'a = a``nil`?

我确信这种行为有一个原因,我只是好奇它是什么.

y = x # NameError: undefined local variable or method 'x'
x = x # => nil
Run Code Online (Sandbox Code Playgroud)

Hol*_*ust 5

这是由Ruby中初始化变量的方式引起的,这对于这种语言来说是独一无二的.基本上,Ruby初始化(创建)一个变量,如果它可能被赋值一个.考虑这个例子:

if false
  x = "hello"
end
Run Code Online (Sandbox Code Playgroud)

x肯定不会在"hello"这里分配字符串.但是,它仍然会nil从静态程序分析中初始化,它可以被分配.

你的例子很相似.因为您指定了某些内容x,所以nil 执行该语句之前它将被初始化.因此,在执行期间,x事实上nil.