Project

General

Profile

Actions

Bug #10441

closed

Wrong required argument count reported for **kwargs method ArgumentErrors

Added by jxf (John Feminella) about 10 years ago. Updated about 5 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
[ruby-core:65946]

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.

Actions

Also available in: Atom PDF

Like0
Like0