From: Yukihiro Matsumoto Date: 2010-09-29T23:43:47+09:00 Subject: [ruby-dev:42312] Re: Introducing "rb_scan_keyword_args()" (was Re: Re: Enhancing Numeric#step) まつもと ゆきひろです In message "Re: [ruby-dev:42308] Re: Introducing "rb_scan_keyword_args()" (was Re: Re: Enhancing Numeric#step)" on Wed, 29 Sep 2010 16:45:38 +0900, "Akinori MUSHA" writes: |> * シンボルでなく文字列 | | メソッド呼び出しごとの rb_intern() のコストはどう考えますか? |現状の手書き処理ではほぼ漏れなくIDまたはSymbolを事前生成している |実態に即してIDを取れるようにしたのですが。 もちろん理由は分かります。が、正直Cコードを書く身としては、毎 回internを書くのがイヤです。 | これも、呼び出しごとに切り出しとコピーを含む文字列処理が必要に |なるのが気になります。 これも、コストと書きやすさのトレードオフですね。私は書きやす さを優先する傾向があります。両方用意するのがよいのかもしれま せん。 | 逆に動的生成のキーワード群を扱いたいシーンでも、自前でアロケート |&コピーする手間が生じて煩わしいのではないでしょうか。 | | 提案中の仕様は、所与のkeywordを加工せずに渡せる利点があります。 | |必須引数: | rb_scan_keyword_args(opt, "1*", rb_intern(keyword), &val, NULL, &opt); | |省略可能引数: | rb_scan_keyword_args(opt, "*", rb_intern(keyword), &val, NULL, &opt); 確かにそうですが、動的生成のキーワードを使いたい局面がちょっ と思いつかないので、これについては積極的に賛成しません。 | なお、わざわざ * を渡さないと残り受け取れない仕様にしてあるのは |拡張性が念頭にあります。返り値がないのもそうですが、上の例を見ると |キャプチャーした数を返すのが妥当な気がしてきました。 「* を渡さないと残り受け取れない仕様」には賛成します。 |> を考えていました。あと関数名はrb_scan_keyword_argsじゃなくて、 |> rb_keyword_argsがいいかなあ。 | | 動詞なしはちょっと…。rb_scan_kwargsくらいに縮めればいいですか? 元々はrb_scan_keywordsでしたね。予約語と混同しそうなのでargs を追加したのでしょうか。たとえば、私の提案した仕様のものを rb_scan_kwargs() とし、武者さんの仕様のものを rb_scan_keyword_args() として両方提供するというのはどうでしょう? まつもと ゆきひろ /:|)