読者です 読者をやめる 読者になる 読者になる

Array.newのデフォルト値

Ruby

今日のはまり

irb(main):001:0> ary=Array.new(3,[])
=> [[], [], []]
irb(main):002:0> ary[1].push("test")
=> ["test"]
irb(main):003:0> ary
=> [["test"], ["test"], ["test"]]
irb(main):004:0> ary=[[],[],[]]
=> [[], [], []]
irb(main):005:0> ary[1].push("test")
=> ["test"]
irb(main):006:0> ary
=> [[], ["test"], []]

Array.newのデフォルト値の設定で[]を入れてしまうと、
初期化してから個数分代入するようだ。
よって、要素がすべて同じものが入ってしまう。
よって、個数分繰り返すのが正解のようだ。

irb(main):001:0> ary=[];3.times{ary.push([])}
=> 3
irb(main):002:0> ary
=> [[], [], []]
irb(main):003:0> ary[1].push("test")
=> ["test"]
irb(main):004:0> ary
=> [[], ["test"], []]
irb(main):005:0>