[ruby-core:94715] [Ruby master Bug#10994] Inconsistent behavior when mixing optional argument and keyword splat
From:
merch-redmine@...
Date:
2019-09-02 04:31:04 UTC
List:
ruby-core #94715
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>