From: merch-redmine@... Date: 2019-09-02T04:31:04+00:00 Subject: [ruby-core:94715] [Ruby master Bug#10994] Inconsistent behavior when mixing optional argument and keyword splat Issue #10994 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Closed With the acceptance of #14183, you now get: ```ruby foo(h) # => {"a"=>1} foo(h).equal?(h) # => true foo(h, y: 1).equal?(h) # => true ``` ---------------------------------------- Bug #10994: Inconsistent behavior when mixing optional argument and keyword splat https://bugs.ruby-lang.org/issues/10994#change-81326 * Author: ruipserra (Rui Serra) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin13] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- The following code produces inconsistent behavior: ``` def foo(x=nil, **kw) x end h = { "a" => 1 } foo(h) # => {"a"=>1} foo(h).equal?(h) # => false foo(h, y: 1).equal?(h) # => true ``` It seems that in this very specific case, foo is returning a copy of h instead of returning h itself. I guess this is an edge case in the keyword extraction process. Thank you for your time. -- https://bugs.ruby-lang.org/ Unsubscribe: