2

元のコードは次のようになります。

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

    ..
    ..
  end
end

STREET_NAMEこれはサードパーティの宝石です。ソースコードを編集しなくても、イニシャライザで変数を変更できることを望んでいました。これは可能ですか?

4

1 に答える 1

9

再割り当てするだけです。

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

オブジェクトをフリーズすると、それだけがフリーズします。変数(参照)自体ではなく、オブジェクトです。ただし、定数を再割り当てすると、警告が表示されます。

警告:すでに初期化された定数STREET_NAME

通常、定数を再割り当てすることはお勧めできませんが、これはRubyであり、すべてが動的であるため、定数は実際には一定ではありません。イニシャライザでこれを行うと、問題なく動作するはずです。

于 2012-04-22T17:11:04.037 に答える