From: gotoken@... (GOTO Kentaro) Date: 2000-05-15T02:20:21+09:00 Subject: [ruby-list:22551] Re: Array.concat on ruby-1.5.3 ごとけんです In message "[ruby-list:22549] Re: Array.concat on ruby-1.5.3" on 00/05/15, Tokita Kousui writes: >「::」と「#」はそれぞれ何を表記してるんでしたっけ? (^^; Foo::x はクラス Foo のクラスメソッド x で、 Foo#y はクラス Foo のメソッド y です。 Foo::x は、プログラムの中に書けるのですが、Ruby にはレシーバ を特定しないメソッドがないので Foo#y はあくまで説明のための 表記法です。 >確認ですが >Array << String は、そのまま使用可ですね? これは、array << string と書くと意味が誤解しにくいです。 Array << String と書くと、このままRubyの文として解釈できるの でちょっとよろしくありません(Array::<< はありませんが)。 結論は array << string は使用可能です。array.push string で も良いです。 Array#<< と Array#push の違いは引数をいくつ取れるかにあり、 文法上 << は演算子として扱われるので「引数」はちょうど1つで なければなりません。一方、push の引数は0個以上です。 >意味的に concat だと「連結」ってイメージだから「配列どうしの連結」で >右辺値は配列である必要があるという事で ><< は、「要素の追加」というイメージで「配列の要素に右辺値を追加」 >は今後も期待しても大丈夫な動作ですよね? そのとおりです。1.5以降でも使えるはずです。付け加えれば、<< は多分 C++ の stream の演算子から来ているので、 array << foo << bar << baz のようなメソッドチェーンを見やすくするためにあるのだと思いま す。もっともRubyのメソッドは可変個の引数をとれて、push もそ うなっているので、 array.push(foo, bar, baz) とも書けるから、そんなに嬉しくはないですが。 -- gotoken