まつもと ゆきひろです

In message "Re: [ruby-dev:29014] def m(a=nil, b)"
    on Tue, 11 Jul 2006 12:51:33 +0900, Tanaka Akira <akr / fsij.org> writes:

|ふと、1.9 なら (TCPServer#initialize のように) 第一引数を省
|略可能なメソッドを def m(a=nil, b) と定義できるのではなかろ
|うか、と想像し、試してみたのですが、できないようです。

できません。

|def m(a=nil, *x, b) end なら通るわけですが、どうも私はこの機
|能を「必須引数を最後につけられる」と理解していたようです。

えーと、現状、これは「rest引数から必須引数を引き剥がす」機能
ですね。

  def m(a=nil, b)

の場合、rest引数がありません(から現状は許されない)。これを許
した場合、m(1)とした場合、順序を優先するなら1はaに代入される
べきではないかと。順序を優先しないなら、むしろキーワード引数
(名前付き引数)のようなものが望ましいと思います。

|def m(a=nil, *x, b) end なら通るわけですが、どうも私はこの機
|能を「必須引数を最後につけられる」と理解していたようです。
|
|実際にはそう実装されてはいなかったわけですが、すこし考えてみ
|たところ、そうであってはいけない理由も思い付かず、また、
|TCPServer#initialize のようにそう考えたほうが便利な例もあり
|ます。

個人的にはTCPServerのアレはあまり良いAPIであるとは思っておら
ず、それを支援する機能をつけることにも消極的です。やりたけれ
ば自分でやってね、と。

実装が今よりも大変というのもあるのですが、それは面倒なだけで
不可能でも困難でもないのですが、それだけの動機づけはないな、
と。

                                まつもと ゆきひろ /:|)