• ベストアンサー

配列定義の書き方

Rubyで配列を新しく定義するとき、Array.new(3,"TEST")とArray.new(3) { "TEST" }ではどう違いますか?またどう使い分けますか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#158634
noname#158634
回答No.1

Array.new(3,"TEST")、Array.new(3) { "TEST" }で生成される配列はどちらも見た目上["TEST","TEST","TEST"]ですが、両者で異なるのが「3つのオブジェクトが同一かどうか」です。 Array.new(3,"TEST")の場合 配列の中身はこの↑"TEST"という文字列です。同じオブジェクトです。 Array.new(3) { "TEST" }の場合 配列の中身は↑この部分↑つまりブロックを実行した戻り値としての"TEST"という文字列です。そして、Array#newにブロックを渡した場合、それぞれの要素について毎回ブロックが呼ばれます。つまり、毎回新しい"TEST"という文字列を生成しているので、3つの"TEST"は異なるオブジェクトです。 object_idというのがあります。これは各オブジェクトに自動的に割り当てられる数値のIDで、異なるオブジェクトは必ず異なるobject_idになります。逆に「同じオブジェクトのobject_idは同じ」と言うことになります。 @array = Array.new(3, "TEST") @array.each {|n| puts n.object_id} と @array = Array.new(3){ "TEST" } @array.each {|n| puts n.object_id} をそれぞれ実行した結果を比べれば違いがよく分かると思います。 …まあマニュアル見れば詳しく書いてあるんですけどね(笑)

参考URL:
http://doc.okkez.net/static/192/class/Array.html
rinrin_ring
質問者

お礼

ありがとうございます。ブロックを使うと同じ"TEST"でも違うものが入るんですね。 マニュアルしっかり見ます。すみません……

関連するQ&A