Ruby 数组意外多重赋值

Ruby 数组意外多重赋值,ruby,Ruby,我有以下数组: @master = Array.new(4, Array.new(2, Array.new())) => [[[], []], [[], []], [[], []], [[], []]] 我正试图通过以下方式分配最前面的值: @master[0][0] = "x" => "x" 但这是一个多重任务 @master => [["x", []], ["x", []], ["x", []], ["x", []]] 如何仅指定第一个值?我希望得到以下阵列: @ma

我有以下数组:

@master = Array.new(4, Array.new(2, Array.new()))
=> [[[], []], [[], []], [[], []], [[], []]]
我正试图通过以下方式分配最前面的值:

@master[0][0] = "x"
=> "x"
但这是一个多重任务

@master
=> [["x", []], ["x", []], ["x", []], ["x", []]]
如何仅指定第一个值?我希望得到以下阵列:

@master
=> [["x", []], [[], []], [[], []], [[], []]]

这样,每个子数组都使用相同的引用。这样试试

@master = Array.new(4) { Array.new(2) { Array.new } }

创建一个数组并将其分配给第一个数组的每个元素;尝试运行以下代码:

@master.each { |e| puts e.object_id }
输出(您的ID将不同):


正如您所看到的,是完全相同的对象,因此请尝试使用
@master=Array.new(4){Array.new(2){Array.new()}
,这将为第一个数组中的每个项目创建一个新数组。

这很有效--我将在8分钟后接受。如果我仔细读了这本书,我想我可能会明白这一点。谢谢我有两个小小的Ruby要点:1.调用不传递参数的方法(
m
而不是
m()
)时,通常省略括号;二,<代码>数组。新的(无参数或块)通常是编写的
[]
。作为一般性评论,我建议您不要急于选择答案。你不想阻碍其他答案的获得,你可能希望给仍在研究答案的读者一段时间,让他们在授予绿奖之前完成。
70192803217260
70192803217260
70192803217260
70192803217260