为什么在Ruby中未初始化的实例变量返回nil,但未初始化的类变量会引发错误?

时间:2015-02-21 21:03:53

标签: ruby

在Ruby中,为什么未初始化的实例变量返回nil而未初始化的类变量会引发NameError

比较

@some_uninitialized_variable # => nil

@@some_uninitialized_class_variable # => NameError

2 个答案:

答案 0 :(得分:7)

我的观点如下:

  • 未初始化的局部变量返回名称错误,因为Ruby不知道它是打算是局部变量还是不存在的方法。

  • 如果未初始化的类变量在未定义时返回nil,则当变量实际上由远程祖先赋值nil时,可能会导致令人讨厌的错误。也就是说,我认为这是保护编码员。

  • 如果使用经常使用的功能nil,则在未初始化时,实例变量默认为@a = @a || []

答案 1 :(得分:0)

这似乎是Object#instance_variable_get的工作方式。

我在猜你在IRB尝试这个。如果您打开提示并输入selfself.class,则可以看到您正在使用名为Object的{​​{1}}。

但这只会回答在哪里部分问题(如果有的话),而不是为什么部分。