- ベストアンサー
配列定義の書き方
Rubyで配列を新しく定義するとき、Array.new(3,"TEST")とArray.new(3) { "TEST" }ではどう違いますか?またどう使い分けますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
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} をそれぞれ実行した結果を比べれば違いがよく分かると思います。 …まあマニュアル見れば詳しく書いてあるんですけどね(笑)
お礼
ありがとうございます。ブロックを使うと同じ"TEST"でも違うものが入るんですね。 マニュアルしっかり見ます。すみません……