From: Yusuke Endoh Date: 2011-10-18T01:36:58+09:00 Subject: [ruby-dev:44602] keyword arguments 遠藤です。 # redmine の 2.0 tracker にチケットを登録したのですが、メールが # 流れないようです。パッチはチケットを見てください。 # http://redmine.ruby-lang.org/issues/5454 キーワード引数を実装してみました。 $ cat t.rb def foo(str: "foo", num: 424242) p [str, num] end foo(str: "bar") $ ./ruby t.rb ["bar", 424242] 細かいことはまだ気にしていませんが、キーワード引数が 2.0 に入る ことはかなり確定的なので、とりあえず trunk に入れて考えるという のはどうでしょうか。 一応私の環境では make check は通ります (キーワード引数のテスト は書いてないですが) 。パーサに conflict はないです。 既存のベンチマークを見ると、一部気になる項目もありますが (vm1_ rescue とか) 、全体的には特に速度劣化しないようです。 以下は未実装・懸案です。 - 残りのキーワード引数を受け取る方法が必要か def foo(str: "foo", num: 424242, **h) p h end foo(str: "bar", check: true) #=> { :check => true } - nil が渡されたらやはり nil になるべき? def foo(str: "foo") p str end foo(str: nil) #=> nil ? (今は手抜きで "foo") - rest なしで知らないキーワードが来たら例外・警告を発して 欲しい? def foo(str: "foo", num: 424242) end foo(check: true) #=> ArgumentError? - Hash のように振る舞うオブジェクトもキーワード引数として 解釈すべき? (現在は速度重視で T_HASH だけ見ている) - 引数の順番はよいか def foo( a, b, c, # mandatory arguments opt = 1, # optional arguments *rest, # rest argument x, y, z, # post mandatory arguments k1: 1, k2:2, # keyword arguments **kh, # keyword rest argument &blk # block argument ) - 他いろいろ -- Yusuke Endoh