【ruby】キーワード引数と通常の引数組み合わせ

キーワード引数と通常の引数組み合わせ

エラー例

def test_method1(params = {}, hoge: true)
  return params, hoge
end
# こける
$ irb>  test_method1({test: 'test', test2: 'test2'})
$ ArgumentError: unknown keywords: test, test2

エラーとならない

def test_method2(params, hoge: true)
  return params, hoge
end

すると、

# こけない
$ irb(main)>  test_method2({test: 'test', test2: 'test2'})
$ => [{:test=>"test", :test2=>"test2"}, true]

エラーとならない2

もう一つ

def test_method3(hoge: true, **params) # 引数の順序としてキーワード引数が先となる
  return params, hoge
end

すると、

# これもこけない
$ irb(main)>  test_method3({test: 'test', test2: 'test2'})
$ => [{:test=>"test", :test2=>"test2"}, true]