更改数组数组中的一个数组会改变所有数组; 为什么?
a = Array.new(3,[]) a[1][0] = 5 a => [[5], [5], [5]]
我觉得这没有意义! 是不是应该a => [[],[5],[]]或者这种Ruby的function?
改为使用它:
a = Array.new(3){ [] }
使用您的代码,相同的对象用于每个条目的值; 一旦你改变其中一个引用,你会看到所有其他引用都发生了变化 使用上面的代码,您每次需要一个新值时都会调用该块,每次返回一个新数组。
这在性质上与新用户问题类似,关于为什么以下内容无法按预期工作:
str.gsub /(<([az]+)>/, "-->#{$1}<--"
在上面,字符串插值发生在调用gsub
方法之前,因此它不能在字符串中使用当前值$1
。 同样,在您的问题中,您创建一个对象并在 Ruby开始创建数组插槽之前将其传递给Array.new
。 是的,运行时默认情况下可以在项目上调用dup
...但这可能是灾难性的,也可能很慢。 因此,您将获得块表单以自行确定如何创建初始值。