プログラム内の特定のRuby文字列を不変にする必要があります。最善の解決策は何ですか?String
クラスのラッパーを作成しますか?
このfreeze
方法は私にはうまくいきません。freeze
オブジェクトのフリーズを解除できないようです。
私の状況は次のとおりです。文字列をコールバックに渡すクラスがあります。この文字列はたまたまクラスのインスタンス変数であり、潜在的に大きくなる可能性があります。コールバックで変更したくありませんが、クラスが自由に変更できるようにします。
以下は私の状況です: 文字列をコールバックに渡すクラスがあります。
文字列のコピーをコールバックに渡すことはできますか?
この文字列はたまたまクラスのインスタンス変数であり、潜在的に大きくなる可能性があります。コールバックで変更したくありませんが、クラスが自由に変更できるようにします。
文字列のサイズが気になる場合は、String#dup を使用すると役立ちます。異なる を持つ新しいオブジェクトを作成しますobject_id
が、新しい文字列 (または元の文字列) が変更されない限り、文字列の内容はコピーされません。これは「コピー オン ライト」と呼ばれ、2 重に見る: Ruby が文字列値を共有する方法で説明されています。
#freeze
文字列を呼び出します。参照: http://ruby-doc.org/core-1.9.3/Object.html#method-i-freeze