From: merch-redmine@... Date: 2019-09-02T04:24:08+00:00 Subject: [ruby-core:94714] [Ruby master Bug#11068] unable to ommit an optional keyarg if the previous arg is an optional hash Issue #11068 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Closed With the acceptance of #14183, this code now emits warnings as the behavior will change in Ruby 3: ```ruby foo({b: 1}) # (irb):53: warning: The last argument is used as the keyword parameter # (irb):51: warning: for `foo' defined here # ArgumentError (unknown keyword: :b) ``` In Ruby 3, you will not get a warning, and the code will work as expected. To get the Ruby 3 behavior currently, you can do: ```ruby foo({b: 1}, **(;{})) # => [{:b=>1}, nil] ``` ---------------------------------------- Bug #11068: unable to ommit an optional keyarg if the previous arg is an optional hash https://bugs.ruby-lang.org/issues/11068#change-81324 * Author: bughit (bug hit) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ``` irb(main):001:0> def foo(hash = {}, a: nil); [hash, a] end => :foo irb(main):002:0> foo({b: 1}, a: 1) => [{:b=>1}, 1] irb(main):003:0> foo({b: 1}) ArgumentError: unknown keyword: b from (irb):1:in `foo' from (irb):3 from /home/alex/.rbenv/versions/2.2.2/bin/irb:11:in `
' irb(main):004:0> ``` -- https://bugs.ruby-lang.org/ Unsubscribe: