4

プログラム内の特定のRuby文字列を不変にする必要があります。最善の解決策は何ですか?Stringクラスのラッパーを作成しますか?

このfreeze方法は私にはうまくいきません。freezeオブジェクトのフリーズを解除できないようです。

私の状況は次のとおりです。文字列をコールバックに渡すクラスがあります。この文字列はたまたまクラスのインスタンス変数であり、潜在的に大きくなる可能性があります。コールバックで変更したくありませんが、クラスが自由に変更できるようにします。

4

2 に答える 2

10

以下は私の状況です: 文字列をコールバックに渡すクラスがあります。

文字列のコピーをコールバックに渡すことはできますか?

この文字列はたまたまクラスのインスタンス変数であり、潜在的に大きくなる可能性があります。コールバックで変更したくありませんが、クラスが自由に変更できるようにします。

文字列のサイズが気になる場合は、String#dup を使用すると役立ちます。異なる を持つ新しいオブジェクトを作成しますobject_idが、新しい文字列 (または元の文字列) が変更されない限り、文字列の内容はコピーされません。これは「コピー オン ライト」と呼ばれ、2 重に見る: Ruby が文字列値を共有する方法で説明されています。

于 2012-06-21T23:57:03.430 に答える
2

#freeze文字列を呼び出します。参照: http://ruby-doc.org/core-1.9.3/Object.html#method-i-freeze

于 2012-06-21T23:32:38.223 に答える