2011-08-01 139 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

相關問題