2012-04-22 4 views
2

元のコードは次のようになります。このRuby変数をどのように無効にすることができますか?

module Acme 
    class Address 
    STREET_NAME = "123 acme inc drive".freeze 

    .. 
    .. 
    end 
end 

これは、サードパーティ製の逸品です、私は、ソースコードを編集しなくても、何とか初期化子でSTREET_NAME変数を変更する可能性が期待していました。これは可能ですか?

答えて

9

ちょうどそれを再割り当て:オブジェクトを凍結

Acme::Address::STREET_NAME = "1 Infinite Loop" 

はちょうどそれをフリーズ:オブジェクトなく、変数(参照)自体。定数を再割り当てすることはしかしあなたに警告を与える:

警告:それは一般的に再割り当てするのは良い考えではありません定数を-が、すべてが動的であるので、これはルビーで、以来、すでに一定のSTREET_NAME

初期化定数は実際には一定ではありません。イニシャライザでこれを行うにはうまくいくはずです。

+3

警告:警告を避けたい場合は、再割り当てする前に 'Acme :: Address.send:remove_const、:STREET_NAME'を実行することができます。 – matt

+0

@matt、ありがとうございます。 – Blankman

関連する問題