今日も Ruby Gold のサンプル問題を解いてて,Array.new
の挙動で知らなかったところがあった!
- 問題 (2015年4月8日)
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"]
まとめ
マニュアルに書いてあるとは言え,実際に使ったことないとパッと答え出ないよなぁ.