[ruby-core:94717] [Ruby master Bug#15753] unknown keyword when passing an hash to a method that accepts a default argument and a named argument
From:
merch-redmine@...
Date:
2019-09-02 04:39:49 UTC
List:
ruby-core #94717
Issue #15753 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Closed
The first example should fail, because you are passing an unsupported keyword to a method that accepts a keyword.
With the acceptance of #14183, the second example now submits a warning:
```ruby
do_something({ user: { id: 1 } })
# (irb):85: warning: The last argument is used as the keyword parameter
# (irb):82: warning: for `do_something' defined here
# ArgumentError (unknown keyword: :user)
```
In Ruby 3, the second example will pass the hash as the first argument. To get the Ruby 3 behavior with the master branch:
```ruby
do_something({ user: { id: 1 } }, **(;{}))
# => nil
```
----------------------------------------
Bug #15753: unknown keyword when passing an hash to a method that accepts a default argument and a named argument
https://bugs.ruby-lang.org/issues/15753#change-81330
* Author: localhostdotdev (localhost .dev)
* Status: Closed
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.7.0dev (2019-03-18 trunk 67296) [x86_64-darwin17] / ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin17]
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
e.g.
```ruby
>> def a(b = {}, c: 1); p [b, c]; end; a(a: 1)
Traceback (most recent call last):
3: from (irb):3
2: from (irb):3:in `rescue in irb_binding'
1: from (irb):3:in `a'
ArgumentError (unknown keyword: a)
```
Prettier version:
```ruby
def do_something(thing = {}, force: true)
# doing things
end
do_something({ user: { id: 1 } })
# => ArgumentError (unknown keyword: user)
```
Tested on ruby-head from ~1 month ago and ruby 2.6.2
--
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>