From: merch-redmine@... Date: 2019-10-13T17:17:32+00:00 Subject: [ruby-core:95313] [Ruby master Bug#10441] Wrong required argument count reported for **kwargs method ArgumentErrors 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: