我正在尝试使用具有默认值的另一个哈希来初始化 Ruby 中的哈希。我想要深拷贝,但似乎只得到了浅拷贝。
以下是示例:
现在"my_hash"和"DEFAULT_HASH"中的a的值都是4,我只想改变我哈希表中的值。
我也尝试了其他方法:
所有这些方法都能产生相同的效果。如何最好地实现这种初始化呢?我还在处理嵌套哈希,这使得问题有些复杂。
即我的DEFAULT_HASH看起来像:
以下是示例:
DEFAULT_HASH = { a: 0, b: 1 }.freeze
my_hash = DEFAULT_HASH.dup
my_hash[:a] = 4
现在"my_hash"和"DEFAULT_HASH"中的a的值都是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}}
DEFAULT_HASH
改变了吗? - Makoto