2011-08-01 99 views
2

博客文章Uninitialized variables指出,未初始化的类变量,局部变量和常量会导致异常(在经过method_missing或其等价物之后),而未初始化的全局变量和实例变量只会导致警告。为什么某些变量未初始化会导致错误,而其他变量会导致警告?

是否存在导致异常的逻辑,哪些导致了警告?

+0

作为一个侧面说明,详细模式(一个由'触发-w'开关)有点[破](http://mislav.uniqpath.com/2011/06/ruby-verbose-mode/);如果我们忽略全局变量作为一个不必要的邪恶,我宁愿读你的问题作为“为什么访问未初始化的类,局部变量和常量会导致异常,并且访问未初始化的实例变量是完全有效的?” – whitequark

+0

@whitequark:我推荐任何阅读该博客文章的人阅读[此博客文章]( http://avdi.org/devblog/2011/06/23/how-ruby-helps-you-fix-your-broken-code/) –

+0

我毫不怀疑有人会提出那个宝INT。就我个人而言,我认为便捷,例如,简写记忆超过了这类错误的实际影响。只是运行你的测试...没有任何?好。我的IDE强调了仅在整个项目中使用过一次的标识符。 – whitequark

回答

2

我的猜测是,它们可能在元编程中有用时会提供异常。您可以轻松地实例化一个全局变量或实例变量,如果你发现它缺少 - 我经常看到的成语:

@var ||= 'default_value' 

无需任何幻想。

对于类,其他常量和方法,检查它们是否已定义并使用它们更为尴尬。和例外(和喜欢const_missing的相关方法method_missing提供钩来处理他们的缺席。例如,我相信Rails使用const_missing在运行时加载类。

+1

正如我所指出的那样,'|| ='构造[不](http://rxr.whitequark.org/mri/source/doc/ChangeLog-1.8.0#13593)会引发警告。 – whitequark

相关问题