From: Kouhei Sutou Date: 2010-09-09T19:33:20+09:00 Subject: [ruby-dev:42214] Re: Enhancing Numeric#step 須藤です。 In "[ruby-dev:42210] Re: Enhancing Numeric#step" on Thu, 9 Sep 2010 13:32:41 +0900, Yukihiro Matsumoto wrote: > のような文法にしようと思っているのですが、キーワード辞書を明 > 示的に取り出さなかった場合には、指定していなかいキーワードに > 対して例外を出そうと考えています。つまり、 > > > def step(to: limit, by: step) > ... > end > > は、:toと:by以外のキーワードに例外を発生させますが、 > > def step(to: limit, by: step, **kw) > ... > end > > は、どのキーワードに対しても例外を発生させません。そのことを > 考えると、rb_scan_options()も例外を発生させるかどうかを切り > 替える手段があるべきでしょう。それがフラグなのか、別関数にす > るのかは分かりませんが。 であれば、こんな使い方にするのはどうでしょうか? /* toかby以外があれば例外 */ rb_scan_options(options, "to", &limit, "by", &step, NULL); /* toかby以外があったら全部kwに入る */ rb_scan_options(options, "to", &limit, "by", &step, "**", &kw, NULL); でも、これだと:**が使えないので、 /* toかby以外があったら全部kwに入る */ rb_scan_options(options, "to", &limit, "by", &step, "", &kw, NULL); とか。 うーん、でも、これはあんまりキレイじゃないですね。。。