前田です。 2009/02/26 21:07 に nagachika<nagachika00 / gmail.com> さんは書きました: > 多重代入の右辺やメソッド呼び出しの引数で * を付けて展開する時に > 呼ばれるメソッドは 1.8.7だと to_ary なのですが、 > 1.9(trunk)だと to_a が呼ばれるようになっているようです。 1.8.7でもto_aryがなければto_aが呼ばれるので、to_aの前にto_aryを呼ぶ処理が なくなったようですね。 > この変更は意図的なものでしょうか? どうでしょうか? > まつもとさん to_aryが定義されているクラスでは、きっとto_aも定義されていると思うので、実用上 はあまり問題ないような気もしますが。 逆に*x = yのように左辺に*が現れるケースでは、1.9からto_aryが呼ばれるように なっているので、何となくちぐはぐな感じがします。 $ ruby-1_8 -ve 'class Foo; def to_ary; [1,2]; end; end; *x = Foo.new; p x' ruby 1.8.8dev (2009-07-13 revision 24066) [i686-linux] [#<Foo:0xb7ca86ec>] $ ruby-trunk -ve 'class Foo; def to_ary; [1,2]; end; end; *x = Foo.new; p x' ruby 1.9.2dev (2009-07-02 trunk 23933) [i686-linux] [1, 2] こちらは、1.6の時の挙動に戻ってる感じですかね。 $ ruby-1.6.8 -ve 'class Foo; def to_ary; [1,2]; end; end; *x = Foo.new; p x' ruby 1.6.8 (2002-12-24) [i686-linux] [1, 2] -- Shugo Maeda