2015-11-18 25 views
-1

这里是我的代码:为什么添加元素到特定的子数组会影响给定数组的所有子数组?

but = Array.new(2, []) # => [[], []] 
but[1] << 1 
but # => [[1], [1]] 

如果我创建使用这样的数组:

but = [[], []] 

则不会出现此问题。然而,我需要包含到but中的子数组的数量不是一个稳定的变量,我知道Array.new,循环等的替代方法很麻烦。

为什么会发生这种情况? but[1] << 1是否只影响一个特定的子元素?

+0

你是什么意思的“问题不会发生”? – sawa

回答

1

因为but中的第一个子数组和第二个子数组是相同的数组对象。影响第二个子阵列需要第一个子阵列也受到影响。

请注意,参数会在传递给它们的方法之前进行评估。在Array.new(2, [])中,将子阵列[]评估为单个阵列对象,然后在新创建的阵列中使用两次相同的阵列对象。

相关问题