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

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

相比:

 @some_uninitialized_variable # => nil 

和:

 @@some_uninitialized_class_variable # => NameError 

我的看法如下:

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

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

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

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

我在猜你在IRB尝试这个。 如果打开提示并输入selfself.class ,则可以看到正在处理名为mainObject

但这只能回答问题的一部分(如果有的话),而不是真正的原因部分。