【问题标题】:How do I use .fill method to create new objects?如何使用 .fill 方法创建新对象?
【发布时间】:2015-07-08 17:45:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: arrays ruby multidimensional-array


    【解决方案1】:

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

    请注意,第二个参数使用引用填充数组 同一个对象。因此,仅建议在您使用 需要使用本机不可变对象实例化数组,例如 符号、数字,真假。

    要创建一个包含单独对象的数组,可以传递一个块 反而。此方法可以安全地用于可变对象,例如 哈希、字符串或其他数组

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多