From: merch-redmine@... Date: 2019-09-02T04:39:49+00:00 Subject: [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 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: