(今日の独り言)

[
  [0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0]
]
という 配列(10)の配列(3)を作ろうと
buf = Array.new(3, Array.new(10,0))
と書いてしまうと思ったような動作をしてくれない
例えば配列(10)の末尾にそれぞれ違う数値を追加して
[
  [0,0,0,0,0,0,0,0,0,0,1],
  [0,0,0,0,0,0,0,0,0,0,2],
  [0,0,0,0,0,0,0,0,0,0,3]
]
というものにしたい場合
buf[0] << 1
buf[1] << 2
buf[2] << 3
と書いても、何故か
[
  [0,0,0,0,0,0,0,0,0,0,1,2,3],
  [0,0,0,0,0,0,0,0,0,0,1,2,3],
  [0,0,0,0,0,0,0,0,0,0,1,2,3]
]
というものになってしまう
この挙動から考えてこの配列(10)は全て同じものを参照していると考えられる
つまり 配列(10)の実体は一つしかなく
buf[0] も buf[1] も buf[2] も同じ配列(10)へのポインタであると推測される
もちろん理想は「配列(10)は3つとも別の実体」でなければならない

よってこの問題を回避するには、素直に
buf = [
  [0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0]
]
と書くか
buf = Array.new(3){Array.new(10,0)}
と書けばいい