From: Shugo Maeda Date: 2009-07-15T10:00:05+09:00 Subject: [ruby-dev:38789] Re: 多重代入やメソッド引数の展開でto_aが呼ばれます 前田です。 2009/07/15 7:19 に Yukihiro Matsumoto さんは書きました: > なぜそのような変更したのか、ぜんぜん覚えていないんですが(一時 > 的に to_splat を呼んでたのは覚えてる)、改めて考えてみるとどち > らも to_ary だけが呼ばれるべきのような気がしています。 そうすると、以下のコードの挙動が変わりますが、誰も困らないような気もします。 defiant:~$ ruby-1_8 -ve 'x = *(1..10); p x' ruby 1.8.8dev (2009-07-13 revision 24066) [i686-linux] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] defiant:~$ ruby-trunk -ve 'x = *(1..10); p x' ruby 1.9.2dev (2009-07-02 trunk 23933) [i686-linux] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 1.9では、他にも*x = [1]とかx = *[1]とかの挙動が1.6の時に戻っているようですが、 このあたりのまとまった議論ってありましたっけ。 defiant:~$ ruby-1_8 -ve '*x = [1]; p x' ruby 1.8.8dev (2009-07-13 revision 24066) [i686-linux] [[1]] defiant:~$ ruby-trunk -ve '*x = [1]; p x' ruby 1.9.2dev (2009-07-02 trunk 23933) [i686-linux] [1] defiant:~$ ruby-1_8 -ve 'x = *[1]; p x' ruby 1.8.8dev (2009-07-13 revision 24066) [i686-linux] 1 defiant:~$ ruby-trunk -ve 'x = *[1]; p x' ruby 1.9.2dev (2009-07-02 trunk 23933) [i686-linux] [1] ブロックパラメータと多重代入が明確に分離されたことで、多重代入の方は [ruby-dev:13493]の時のまつもとさんの拘りがなくなって、田中さんの主張 に沿った修正がされたのかなと推測しているのですが。 -- Shugo Maeda