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
=> [{}]
Run Code Online (Sandbox Code Playgroud)
我很困惑,特别是因为我可以更改哈希的元素,而不会影响数组.但是当我清除哈希时,数组会被更新并清除其哈希内容.谁能解释一下?
当你这样做时a << h
,你真的将h的引用传递给a.因此,当您更新h时,还会看到这些更改,因为它包含引用而不是该值的副本.
为了不改变a,你必须将克隆值h传递给a.
一个例子是:
a << h.clone
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
242 次 |
最近记录: |