如何使用.fill方法创建新对象?

时间:2015-07-08 17:45:26

标签: arrays ruby multidimensional-array

具体来说,我想知道为什么当我使用.fill创建一个包含多个子数组的新数组时,使用.fill创建的子数组是同一个对象。

array = Array.new.fill([], 0..8)

subsquare[0].object_id => 7220340
subsquare[1].object_id => 7220340

如何在确保每个子数组都是自己的对象的同时创建这些子数组?

1 个答案:

答案 0 :(得分:3)

如果你看看Array.new,可以找到这个问题的原因: http://ruby-doc.org/core-2.2.0/Array.html

  

请注意,第二个参数使用对引号填充数组   同一个对象。因此,仅在您遇到的情况下推荐   需要使用本机不可变对象实例化数组,例如   符号,数字,真或假。

     

要创建具有单独对象的数组,可以传递块   代替。这种方法可以安全地与可变对象一起使用,例如   哈希,字符串或其他数组

文档中指定的解决方法是:

array = Array.new(8) { [] }