我想通过使用另一个哈希与默认值来初始化红宝石哈希。我想要一个深层的副本,但我似乎只能得到一个浅拷贝。在Ruby中复制哈希
下面是一个例子:
DEFAULT_HASH = { a: 0, b: 1 }.freeze
my_hash = DEFAULT_HASH.dup
my_hash[:a] = 4
现在的在“my_hash”,并在DEFAULT_HASH值为4。我只希望在我的哈希值改变。
我曾尝试其他方法太:
my_hash = {}.merge DEFAULT_HASH
和
my_hash.merge! DEFAULT_HASH
所有这些产生同样的效果。实现这种初始化的最佳方法是什么?我也在使用嵌套散列,这增加了复杂性。
即我DEFAULT_HASH样子:
DEFAULT_HASH = { a:{a:1, b:2}, b:{a:2, b:1} }
这会影响如何做到这一点?
编辑: 嵌套哈希情况下
DEFAULT_HASH = { a:{a:1, b:2}, b:{a:2, b:1} }
=> {:a=>{:a=>1, :b=>2}, :b=>{:a=>2, :b=>1}}
a=DEFAULT_HASH.dup
=> {:a=>{:a=>1, :b=>2}, :b=>{:a=>2, :b=>1}}
a[:b][:a]=12
=> 12
DEFAULT_HASH
=> {:a=>{:a=>1, :b=>2}, :b=>{:a=>12, :b=>1}}
什么版本的Ruby是你这样做?我无法重现你的行为。 – Makoto
这是与JRuby 1.7.19和Ruby 2.2.0 – System123
我使用的是Ruby的类似版本,而我看不到相同的东西。你确定* DEFAULT_HASH正在改变吗? – Makoto