From: Yukihiro Matsumoto Date: 2010-09-09T13:32:41+09:00 Subject: [ruby-dev:42210] Re: Enhancing Numeric#step まつもと ゆきひろです In message "Re: [ruby-dev:42209] Re: Enhancing Numeric#step" on Thu, 9 Sep 2010 12:44:07 +0900, Kouhei Sutou writes: |rroongaという拡張ライブラリを作っているのですが、その中で同 |じシグネチャを持つ関数を定義して使っています。 | http://github.com/ranguba/rroonga/blob/master/ext/groonga/rb-grn-utils.c#L34 | |実際にrroongaの中のいろんなところで使っていますが、便利なの |でいつかRuby本体のC APIに追加してはどうかと提案するつもりで |した。なので、シグネチャはよいと思います。 ありがとうございます。参考にします。 |rroongaで定義している関数では、C APIで指定していないキーワー |ドを指定した場合はArgumentErrorを返すようにしています。(上 |の例だと:byと:to以外のものを指定したら例外) 実装は手つかずのRubyレベルでのキーワード引数は def step(to: limit, by: step) ... end のような文法にしようと思っているのですが、キーワード辞書を明 示的に取り出さなかった場合には、指定していなかいキーワードに 対して例外を出そうと考えています。つまり、 def step(to: limit, by: step) ... end は、:toと:by以外のキーワードに例外を発生させますが、 def step(to: limit, by: step, **kw) ... end は、どのキーワードに対しても例外を発生させません。そのことを 考えると、rb_scan_options()も例外を発生させるかどうかを切り 替える手段があるべきでしょう。それがフラグなのか、別関数にす るのかは分かりませんが。 まつもと ゆきひろ /:|)