在Ruby中,为什么未初始化的实例变量返回nil而未初始化的类变量引发NameError?
相比:
@some_uninitialized_variable # => nil
Run Code Online (Sandbox Code Playgroud)
和:
@@some_uninitialized_class_variable # => NameError
Run Code Online (Sandbox Code Playgroud)
我的看法如下:
未初始化的局部变量返回一个名称错误,因为Ruby不知道它是打算是一个局部变量还是一个不存在的方法.
如果nil在未定义时返回未初始化的类变量,则当变量实际上nil由远程祖先赋值时,可能会导致令人讨厌的错误.也就是说,我认为这是保护编码器.
nil如果经常使用的功能,则实例变量默认为未初始化:@a = @a || [].