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

Ruby の Array.new を size と val で初期化する

今日も Ruby Gold のサンプル問題を解いてて,Array.new の挙動で知らなかったところがあった!

ary = Array.new(3, "a")
ary[0].next!
p ary
# >> ["b", "b", "b"]

Array.new(size = 0, val = nil)

new(size = 0, val = nil) で初期化すると同一オブジェクトになる.

ary = Array.new(3, "a")
p ary[0].equal?(ary[1])
p ary[0].equal?(ary[2])
# >> true
# >> true

Array.new(size) {|index| ... }

異なるオブジェクトで初期化したい場合はブロックで定義する.

ary = Array.new(3) { "a" }
p ary[0].equal?(ary[1])
p ary[0].equal?(ary[2])
ary[0].next!
p ary
# >> false
# >> false
# >> ["b", "a", "a"]

まとめ

マニュアルに書いてあるとは言え,実際に使ったことないとパッと答え出ないよなぁ.

Ruby Gold 関連