まつもと ゆきひろです

In message "[ruby-dev:13591] Re: yield *[[]]"
    on 01/06/14, Tanaka Akira <akr / m17n.org> writes:

|Proc#call 「だけ」に唯一の引数が配列であった場合に展開する処理を入れる
|というのはどうでしょうか?

ということは

  proc{|a| p a}.call([1]) # => 1

ということですか? 今問題になっているのは、こっちではなく

  proc{|a| p a}.call(*[1]) # => [1] or 1

の方だと思うのですが。具体的な例を見せてくださいませんか?

|Proc#call は多値と単値の境目なので、ここで変換されるのは納得できますし、
|他のメソッド(例えば Proc#invoke などという別の名前を使う)を設けること
|により、変換が行なわれないやりかたを提供することもできます。

Proc#yieldというのを用意しようと思っています(これは引数の数
チェックなどを行わないつもりでした)。こちらにその機能を持た
せることはありだと思います。

|それに、Proc#call は代入の右辺の役割をもつくせに
|
|  ... = a,
|
|に対応するものが自然に記述できないというのも気になりますし。

というか、右辺の a, はそもそも許していませんし。

あ、でも

  proc{|a| p a}.call([1,2],*[])

が [1,2] になるという事実を発見してしまいました。うーむ。

							matz.