【发布时间】:2015-05-22 19:13:47
【问题描述】:
考虑以下代码sn-p:
inner_hash =Hash.new
trial_hash = Hash.new
inner_hash.merge!("i_key1"=>"value1")
inner_hash.merge!("i_key2"=>"value2")
puts "inner_hash #{inner_hash}"
trial_hash.merge!("o_key1"=>inner_hash)
puts "trial_hash #{trial_hash}"
inner_hash.clear
inner_hash.merge!("i_key1"=>"value3")
inner_hash.merge!("i_key2"=>"value4")
puts "inner_hash #{inner_hash}"
trial_hash.merge!("o_key2"=>inner_hash)
puts "trial_hash #{trial_hash}"
这是打印出来的:
inner_hash {"i_key1"=>"value1", "i_key2"=>"value2"}
trial_hash {"o_key1"=>{"i_key1"=>"value1", "i_key2"=>"value2"}}
inner_hash {"i_key1"=>"value3", "i_key2"=>"value4"}
trial_hash {"o_key1"=>{"i_key1"=>"value3", "i_key2"=>"value4"}, "o_key2"=>{"i_key1"=>"value3", "i_key2"=>"value4"}}
特别是看到最后一行打印的 trial_hash。键“o_key1”的值是一个哈希值,其值应该是 value1 和 value2,但已被覆盖为 value3 和 value4。理想情况下,预期的输出应该是:
inner_hash {"i_key1"=>"value1", "i_key2"=>"value2"}
trial_hash {"o_key1"=>{"i_key1"=>"value1", "i_key2"=>"value2"}}
inner_hash {"i_key1"=>"value3", "i_key2"=>"value4"}
trial_hash {"o_key1"=>{"i_key1"=>"value1", "i_key2"=>"value2"}, "o_key2"=>{"i_key1"=>"value3", "i_key2"=>"value4"}}
为什么会观察到这种行为。我做错了什么。最初这个问题非常广泛并使用循环,出于示例目的,我已经删除并重新编写了一些行。任何帮助是极大的赞赏。谢谢
编辑:当我将 inner_hash.clear 替换为 inner_hash={}
后,问题就解决了【问题讨论】: