我想通過使用另一個哈希與默認值來初始化紅寶石哈希。我想要一個深層的副本,但我似乎只能得到一個淺拷貝。在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