From: Yukihiro Matsumoto Date: 2010-09-30T23:45:05+09:00 Subject: [ruby-dev:42323] Re: Introducing "rb_scan_keyword_args()" (was Re: Re: Enhancing Numeric#step) まつもと ゆきひろです In message "Re: [ruby-dev:42318] Re: Introducing "rb_scan_keyword_args()" (was Re: Re: Enhancing Numeric#step)" on Thu, 30 Sep 2010 13:47:57 +0900, "Akinori MUSHA" writes: |> * シンボルでなく文字列 |> * 文字列末尾に:がついていたらoptional |> または文字列末尾に!がついていたらmandatory | | 末尾でなく先頭の方が望ましそうです。識別子の末尾にも!が置ける |ので(「method(x!:1)」も文法的に有効)曖昧さが生じます。 記法的には後ろに書いた方が気分がよいのですが、先頭に置くので も妥協できます。っていうか、Rubyレベルではmandatoryなキーワー ド引数を指定する構文を考えていないんですが、それってことは、 つまりrb_scan_keyword_argsでも対応不要ってことなのではないか と今さらながら思いました。 | ちなみに、私が最初に考えていた記法は次のようなもので、動的生成の |便宜や rb_intern() のコストを考えないならこちらの方が書きやすく、 |わかりやすそうに思えます。 | | /* セミコロンはmandatoryとoptionalの区切り */ | rb_scan_keywords(&opt, "x,y;color,size,*", &x, &y, &color, &size, &rest) | |もしかしてまつもとさんにはこれならacceptableだったりしますか? なぜoptではなく&optなのかとか、疑問はあったりしますが、こちら の方が([ruby-dev:42305]案よりは)わかりやすかろうとは思います。 ただし、記法としては私のもの[ruby-dev:42307]の方が好みです。 なぜかと考えた時に、"x,y;color,size,*"と指定することによる分 かりやすさの向上と文字列をを構文解析するコストが見合っていな いように感じるからのように思えます。 まつもと ゆきひろ /:|)