如果是这种情况,即我是误解,还是一个错误?
a = Array.new(3, Array.new(3))
a[1].fill('g')
=> [["g", "g", "g"], ["g", "g", "g"], ["g", "g", "g"]]
不应该导致:
=> [[nil, nil, nil], ["g", "g", "g"], [nil, nil, nil]]
答案 0 :(得分:9)
Array.new(3, Array.new(3))
返回一个包含相同数组三次的数组(换句话说:表达式Array.new(3)
只被评估一次而没有复制)。
您可能想要的是Array.new(3) { Array.new(3) }
,它会评估Array.new(3)
三次,从而为您提供三个独立数组的数组。
答案 1 :(得分:0)
这是正确的,Array.new(array)
返回一个使用obj大小副本创建的新数组(即大小引用相同的obj)