Ruby 在数组数组中更改一个数组会更改所有数组;为什么?

Ruby 在数组数组中更改一个数组会更改所有数组;为什么?,ruby,arrays,Ruby,Arrays,我觉得这没道理! 它不应该是一个=>[],[5],[] 或者这是Ruby的一种功能?用它代替: a = Array.new(3,[]) a[1][0] = 5 a => [[5], [5], [5]] 在代码中,每个条目的值都使用相同的对象;一旦对其中一个引用进行了变异,您就会看到所有其他引用都发生了变化。使用上述方法,您可以在每次需要新值时调用块,每次都返回一个新数组 这在本质上类似于新用户提出的问题,即为什么以下各项不能按预期工作: str.gsub/(/,”-->{$1}另请参阅

我觉得这没道理! 它不应该是一个=>[],[5],[] 或者这是Ruby的一种功能?

用它代替:

a = Array.new(3,[])
a[1][0] = 5
a => [[5], [5], [5]]
在代码中,每个条目的值都使用相同的对象;一旦对其中一个引用进行了变异,您就会看到所有其他引用都发生了变化。使用上述方法,您可以在每次需要新值时调用块,每次都返回一个新数组


这在本质上类似于新用户提出的问题,即为什么以下各项不能按预期工作:

str.gsub/(/,”-->{$1}另请参阅并略作挑剔:“一旦你改变了其中一个实例,你就改变了所有实例”——实际上,只有一个实例,这正是问题所在!
a = Array.new(3){ [] }
str.gsub /(<([a-z]+)>/, "-->#{$1}<--"