为什么清除我的哈希值,也清除我的哈希数组?

Jer*_*ith 3 ruby arrays hash

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)

我很困惑,特别是因为我可以更改哈希的元素,而不会影响数组.但是当我清除哈希时,数组会被更新并清除其哈希内容.谁能解释一下?

Mik*_*wis 5

当你这样做时a << h,你真的将h的引用传递给a.因此,当您更新h时,还会看到这些更改,因为它包含引用而不是该值的副本.

为了不改变a,你必须将克隆值h传递给a.

一个例子是:

a << h.clone
Run Code Online (Sandbox Code Playgroud)