From: Akinori MUSHA Date: 2010-09-29T16:45:38+09:00 Subject: [ruby-dev:42308] Re: Introducing "rb_scan_keyword_args()" (was Re: Re: Enhancing Numeric#step) --pgp-sign-Multipart_Wed_Sep_29_16:45:37_2010-1 Content-Type: text/plain; charset=ISO-2022-JP At Wed, 29 Sep 2010 16:10:27 +0900, matz wrote: > この辺の文法は好みではありません。 > > 引数をシンボルにしたのでこのようになっているのだと思いますが、 > 個人的には > > * シンボルでなく文字列  メソッド呼び出しごとの rb_intern() のコストはどう考えますか? 現状の手書き処理ではほぼ漏れなくIDまたはSymbolを事前生成している 実態に即してIDを取れるようにしたのですが。 > * 文字列末尾に:がついていたらoptional > または文字列末尾に!がついていたらmandatory > * "*" があれば残りがハッシュとして渡る > * "*" が指定されていなければ例外  これも、呼び出しごとに切り出しとコピーを含む文字列処理が必要に なるのが気になります。  逆に動的生成のキーワード群を扱いたいシーンでも、自前でアロケート &コピーする手間が生じて煩わしいのではないでしょうか。  提案中の仕様は、所与のkeywordを加工せずに渡せる利点があります。 必須引数: rb_scan_keyword_args(opt, "1*", rb_intern(keyword), &val, NULL, &opt); 省略可能引数: rb_scan_keyword_args(opt, "*", rb_intern(keyword), &val, NULL, &opt);  なお、わざわざ * を渡さないと残り受け取れない仕様にしてあるのは 拡張性が念頭にあります。返り値がないのもそうですが、上の例を見ると キャプチャーした数を返すのが妥当な気がしてきました。 > * soft warningはなし  確かになくてもいいのかも。 > を考えていました。あと関数名はrb_scan_keyword_argsじゃなくて、 > rb_keyword_argsがいいかなあ。  動詞なしはちょっと…。rb_scan_kwargsくらいに縮めればいいですか? -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Wed_Sep_29_16:45:37_2010-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEABECAAYFAkyi7qEACgkQkgvvx5/Z4e7FiQCfYrxS1P8aM2KQ60Jz47C3vwXN EUwAnjcZ9ojiOuO872fCj2XMb2RWnhW6 =jsJR -----END PGP SIGNATURE----- --pgp-sign-Multipart_Wed_Sep_29_16:45:37_2010-1--