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"}}