Bug #10441
closedWrong required argument count reported for **kwargs method ArgumentErrors
Description
When collecting excess keyword arguments, Ruby's ArgumentError message doesn't count the **kwargs
as possible arguments.
def foo(**kwargs); "args: #{kwargs}"; end
# => :foo
foo(1, 2, 3)
ArgumentError: wrong number of arguments (3 for 0)
from (pry):1:in `foo'
The expected result is something like "ArgumentError: wrong number of arguments (3 for 0..1)". Of course, this could lead to another sort of confusion, in that if you now try:
foo(1)
you would receive "ArgumentError: wrong number of arguments (1 for 0..1)". So I think ArgumentError
should be refined to indicate the kinds of arguments expected: "ArgumentError: wrong number of arguments: 1 argument for 0 arguments and 1 keyword list".
Updated by jeremyevans0 (Jeremy Evans) about 5 years ago
- Status changed from Open to Rejected
jxf (John Feminella) wrote:
When collecting excess keyword arguments, Ruby's ArgumentError message doesn't count the
**kwargs
as possible arguments.def foo(**kwargs); "args: #{kwargs}"; end # => :foo foo(1, 2, 3) ArgumentError: wrong number of arguments (3 for 0) from (pry):1:in `foo'
As keyword arguments will be separated from positional arguments in Ruby 3, it no longer makes sense to change the error message.