7

StringRubyでは、またはArray(etc)オブジェクトが「凍結」されるとはどういう意味ですか? このプロパティはどのように/どこで設定または変更されますか?

4

2 に答える 2

8

変更できないということです。メソッドで設定しfreezeます。

s = "a"

concat文字列インスタンスを変更します。

s.concat("b")
# => "ab"

文字列をフリーズすると:

s.freeze

その後、それ以上申請することはできませんconcat

s.concat("c")
# => RuntimeError: can't modify frozen String

ただし、レシーバーを変更しないメソッドを適用できます。

s + "c"
# => "abc"
于 2013-01-16T05:10:49.813 に答える
2

obj へのそれ以上の変更を防ぎます。変更を試みると、RuntimeError が発生します。凍結されたオブジェクトを解凍する方法はありません。Object#frozen? も参照してください。

a = [ "a", "b", "c" ]
a.freeze
a << "z"

生成:

prog.rb:3:in `<<': can't modify frozen array (RuntimeError)
from prog.rb:3

ドコ

于 2013-01-16T05:12:55.360 に答える