上級 › 可変長引数を委譲するメソッドで * を付け忘れると ArgumentError になる › パターン3
可変長引数を委譲するメソッドで * を付け忘れると ArgumentError になる
受け取った可変長引数(*argsで受けた配列)をそのまま別のメソッドに渡すには、呼び出し側でも*を付けて展開する必要があります。
1 def combine(a, b, c) 2 "#{a}-#{b}-#{c}" 3 end 4 5 def wrapper(*args) 6 combine_______ ^ 7 end 8 9 puts wrapper("x", "y", "z")
main.rb:1:in `combine': wrong number of arguments (given 1, expected 3) (ArgumentError)
from main.rb:6:in `wrapper'
from main.rb:9:in `<main>'
空欄を埋めて実行を通す
配列をそのまま渡せば元の個数のまま伝わるはず、という思い込みは誤りです。*の展開が無いと配列1個として渡ります。
次の問題