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

时间:2012-10-29 17:16:27

标签: ruby

  

可能重复:
  Why is `a = a` `nil` in Ruby?

我确信这种行为是有原因的,我只是好奇它是什么。

y = x # NameError: undefined local variable or method 'x'
x = x # => nil

1 个答案:

答案 0 :(得分:6)

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

if false
  x = "hello"
end

x绝对不会在此处分配"hello"字符串。但是,它仍将使用nil进行初始化,如同静态程序分析一样,它可能已被分配。

你的例子很相似。因为您为x分配了一些内容,所以在执行语句之前,它将使用nil 进行初始化。因此,在执行期间,x实际上是nil