Code Fix

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

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

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

 1  def connect(host:, timeout:)
 2    "#{host} (#{timeout}s)"
 3  end
 4  
 5  def wrapper(**opts)
 6    connect________
                 ^
 7  end
 8  
 9  puts wrapper(host: "db", timeout: 5)
main.rb:1:in `connect': wrong number of arguments (given 1, expected 0; required keywords: host, timeout) (ArgumentError) from main.rb:6:in `wrapper' from main.rb:9:in `<main>'

空欄を埋めて実行を通す

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

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

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

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

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