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

eno*_*com 6 ruby

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

相比:

@some_uninitialized_variable # => nil
Run Code Online (Sandbox Code Playgroud)

和:

@@some_uninitialized_class_variable # => NameError
Run Code Online (Sandbox Code Playgroud)

Car*_*and 7

我的看法如下:

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

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

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