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