[ruby-core:95313] [Ruby master Bug#10441] Wrong required argument count reported for **kwargs method ArgumentErrors
From:
merch-redmine@...
Date:
2019-10-13 17:17:32 UTC
List:
ruby-core #95313
Issue #10441 has been updated by jeremyevans0 (Jeremy Evans).
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.
----------------------------------------
Bug #10441: Wrong required argument count reported for **kwargs method ArgumentErrors
https://bugs.ruby-lang.org/issues/10441#change-82009
* Author: jxf (John Feminella)
* Status: Rejected
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
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".
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>