这是Ruby中Array.fill方法中的错误吗?

时间:2010-07-19 21:25:39

标签: arrays ruby

如果是这种情况,即我是误解,还是一个错误?

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]]

2 个答案:

答案 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)