为什么在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尝试这个。 如果打开提示并输入self
和self.class
,则可以看到正在处理名为main
的Object
。
但这只能回答问题的哪一部分(如果有的话),而不是真正的原因部分。