前田です。

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