Code Fix

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

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

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

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

空欄を埋めて実行を通す

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

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

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

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

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