Ruby2.0以上で使えるキーワード引数で、マッチしないキーワード引数を**
をつけた引数で引き取れるという仕様があるのですが、キーが文字列の場合ArgumentError
が発生します。キーワード引数の性質からして当たり前といえば当たり前のような気もしますがちょっとハマりました。
Rubyのバージョン
% ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
例
def test(**rest)
p rest
end
# OK
test(a:1, :b=>2)
=> {:a=>1, :b=>2}
# NG
test(a:1, 'b'=>2)
ArgumentError: wrong number of arguments (1 for 0)
from (irb):38:in test
from (irb):64
from /Users/kamatama41/.rbenv/versions/2.2.3/bin/irb:11:in <main>
# OK
test({a:1, 'b':2})
=> {:a=>1, :b=>2}
# NG
test({a:1, 'b'=>2})
ArgumentError: wrong number of arguments (1 for 0)
from (irb):38:in test
from (irb):72
from /Users/kamatama41/.rbenv/versions/2.2.3/bin/irb:11:in <main>