繁体   English   中英

Ruby哈希数组意外行为

[英]Ruby array of hashes unexpected behaviour

我试图创建一个哈希数组,在这里我已经找到了一些很好的解决方案:

在Ruby中创建哈希数组

但是,当我自己尝试时,我发现了一些我不理解的行为。

在IRB中创建哈希数组:

array_hashes = Array.new(7, Hash.new)

现在,在尝试分配键时,将值对分配给数组:

array_hashes[1]["hello"] = 200

我在控制台中得到以下输出:

=>[{"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}, {"hello"=>200}]

在所有数组元素上重复相同的key值,当我尝试将另一个key值分配给单个数组元素时,结果相似

array_hashes[3]["world"] = 300
=>[{"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}, {"hello"=>200, "world"=>300}] 

谁能解释这个原因,特别是为什么即使在分配给单个元素时,哈希值也会在所有数组元素上重复出现。 谢谢!

使用的Ruby版本:1.9.3,已在Windows 7和OS X Yosemite上尝试

因为该代码的作用是重复的:

array_hashes = Array.new(7, Hash.new)

这是:

hash = Hash.new
array_hashes = [hash, hash, hash, hash, hash, hash, hash]

因此,同一对象在数组中包含7次。

但是您想做的是:

array_hashes = Array.new(7) { Hash.new }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM