Code Fix

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

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

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

 1  def build_url(scheme:, path:)
 2    "#{scheme}://#{path}"
 3  end
 4  
 5  def wrapper(**opts)
 6    build_url________
                   ^
 7  end
 8  
 9  puts wrapper(scheme: "https", path: "example.com")
main.rb:1:in `build_url': wrong number of arguments (given 1, expected 0; required keywords: scheme, path) (ArgumentError) from main.rb:6:in `wrapper' from main.rb:9:in `<main>'

空欄を埋めて実行を通す

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

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

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

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

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