ハッシュを複製する
Hash#dupでハッシュを複製します。再帰的なコピーは行われません。(shallow copy)
サンプル:
h = { :a=>"aa", :b=>{ :x=>"xx", } } # 複製 h2 = h.dup p h p h2 puts "---" # 変更 h2[:a] = "edit" h2[:b][:x] = "edit" # :bの値のハッシュは共有されている。 p h2 p h
出力:
{:a=>"aa", :b=>{:x=>"xx"}} {:a=>"aa", :b=>{:x=>"xx"}} --- {:a=>"edit", :b=>{:x=>"edit"}} {:a=>"aa", :b=>{:x=>"edit"}}
油断してるとこんなことも。Rubyの文字列は可変です!
h = { :a=>"aa", :b=>{ :x=>"xx", } } h2 = h.dup p h p h2 puts "---" h2[:a].chop! << "x" p h2 p h
出力:
{:a=>"aa", :b=>{:x=>"xx"}} {:a=>"aa", :b=>{:x=>"xx"}} --- {:a=>"ax", :b=>{:x=>"xx"}} {:a=>"ax", :b=>{:x=>"xx"}}