ruby-1.9.2-p180 :154 > a = []
=> []
ruby-1.9.2-p180 :154 > h = {:test => "test"}
=> {:test=>"test"}
ruby-1.9.2-p180 :155 > a << h
=> [{:test=>"test"}]
ruby-1.9.2-p180 :156 > h.clear
=> {}
ruby-1.9.2-p180 :157 > a
=> [{}]
我很困惑,尤其是因为我可以在不影响数组的情况下更改散列的元素。但是当我清除哈希时,数组会更新并清除其哈希内容。谁能解释一下?
最佳答案
当你做 a << h
,您实际上是将 h 的引用传递给 a。因此,当您更新 h 时,a 也会看到这些更改,因为它包含引用而不是该值的副本。
为了使其在 a 中不发生变化,您必须将 h 的克隆值传递给 a。
一个例子是:
a << h.clone
关于ruby - 为什么清除我的哈希值时也会清除我的哈希值数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372704/