使用Hash默认值时奇怪的意外行为(消失/更改值),例如Hash.New([])考虑以下代码:h = Hash.new(0) # New hash pairs will by default have 0 as valuesh[1] += 1 #=> {1=>1}h[2] += 2 #=> {2=>2}很好,但是:h = Hash.new([]) # Empty array as default valueh[1] <<= 1 #=> {1=>[1]}
← Okh[2] <<= 2 #=> {1=>[1,2], 2=>[1,2]} ← Why did `1` change?h[3] << 3 #=> {1=>[1,2,3], 2=>[1,2,3]} ← Where is `3`?在这一点上,我希望散列是:{1=>[1], 2=>[2], 3=>[3]}但远不是这样。发生了什么,我怎样才能得到我期望的行为?
3 回答
- 3 回答
- 0 关注
- 490 浏览
添加回答
举报
0/150
提交
取消