#关于 Array.new 方法创建出的“二维数组”的疑惑
官方文档中关于 Array.new 的使用方法如下:
Array.new(3) #=> [nil, nil, nil]
Array.new(3, true) #=> [true, true, true]
Array.new(4) {Hash.new} #=> [{}, {}, {}, {}]
Array.new(4) {|i| i.to_s } #=> ["0", "1", "2", "3"]
empty_table = Array.new(3) {Array.new(3)}
#=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
当我使用:
Array.new(3, Array.new(4, false)) # => [[false, false], [false, false], [false, false]]
依旧能“正常”创建二维数组。 但是在使用上却有着实际的不同。
一个例子便是:
temp = Array.new(3,Array.new(2,false))
# => [[false, false], [false, false], [false, false]]
temp[1][1] = true #=> true
temp.inspect #=> "[[false, true], [false, true], [false, true]]"
实际上对“单元”的修改变成了对整列的修改。
对此,我希望讨论解答下面几个问题:
我个人初步猜测是 temp[1][1] 的修改是指向整个列的,但是查询还是可以访问到对应的单元