-1

これは、私が理解するのに苦労しているコードの簡略化されたバージョンです:

1.9.3p448 :004 > a = {a: 1, b: 2}
 => {:a=>1, :b=>2} 
1.9.3p448 :005 > b = a
 => {:a=>1, :b=>2} 
1.9.3p448 :006 > b[:c] = 3
 => 3 
1.9.3p448 :007 > a
 => {:a=>1, :b=>2, :c=>3} 
1.9.3p448 :008 > 

変わる理由がわかりませんa。変えたいだけで、元の価値bを維持したい。a

4

1 に答える 1

0

編集:もう一度質問を見て、なぜこれが最初に起こっているのかがわかりました:実際には、ローカル変数への参照を割り当てているだけです。ローカルで値を変更すると、元のハッシュ内の値も変更されます。.dup値のコピーを取得してみてください。ただし、浅いコピーにすぎないため、そこにあるオブジェクトによっては、完全に機能しない場合があります。

オリジナル:

変更されないようにするために使用できますfreeze。変更が適用されると、RuntimeError がスローされます。まだ 100% の保護ではありませんが、偶発的な変更が発生するのを防ぐことができます。

CONSTANT = {:key1 => 'some value', :key2 => 'some other value'}.freeze

ここのドキュメントを参照してください: http://www.ruby-doc.org/core-2.0.0/Object.html#method-i-freeze

ここで制限付きの暴言: http://m.onkey.org/ruby-i-don-t-like-3-object-freeze

于 2013-10-23T15:35:31.793 に答える