0
最近我试图在我的脚本中添加一个数字到其中一个嵌套数组。 我只希望指定索引处的嵌套数组具有附加的数字,但实际发生的是所有嵌套数组都附加了数字。为什么Array#将附加到嵌套数组中的所有数组而不仅仅是指定的索引?
这种行为似乎很奇怪,为什么ruby数组以这种方式工作?
irb(main):001:0> [1,2,3].push 3
=> [1, 2, 3, 3]
irb(main):002:0> layered = [[]] * 5
=> [[], [], [], [], []]
irb(main):003:0> layered[0] << 2
=> [2]
irb(main):004:0> layered
=> [[2], [2], [2], [2], [2]]
irb(main):005:0>
非常感谢你!这似乎有点令人困惑,为什么'[[]] * 5'会这样做。你知道什么时候使用'[[]] * 5'的实际例子是合适的吗? – Nirma
当您将在赋值时替换整个数组(就像您应该这样做)。所以如果你用'layered [0] + = [2]'代替'layered [0] << 2',那么它应该可以工作。 – Hauleth