Code Fix

上級キーワード引数を委譲するメソッドで ** を付け忘れると ArgumentError になる › パターン3

キーワード引数を委譲するメソッドで ** を付け忘れると ArgumentError になる

受け取ったキーワード引数(**optionsで受けたハッシュ)をそのまま別のメソッドに渡すには、呼び出し側でも**を付けて展開する必要があります。

 1  def setup(mode:, level:)
 2    "#{mode}/#{level}"
 3  end
 4  
 5  def wrapper(**opts)
 6    setup________
               ^
 7  end
 8  
 9  puts wrapper(mode: "auto", level: 3)
main.rb:1:in `setup': wrong number of arguments (given 1, expected 0; required keywords: mode, level) (ArgumentError) from main.rb:6:in `wrapper' from main.rb:9:in `<main>'

空欄を埋めて実行を通す

広告
広告スロット(未設定)

キーワード引数を委譲するメソッドで ** を付け忘れると ArgumentError になる

**を付けずに渡すと、ハッシュが1個の位置引数として渡ってしまい、キーワード引数として認識されずArgumentErrorになります。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)