[ruby-core:98322] [Ruby master Bug#16853] calling bla(hash, **kw) with a string-based hash passes the strings into **kw (worked < 2.7)
From:
merch-redmine@...
Date:
2020-05-13 15:39:43 UTC
List:
ruby-core #98322
Issue #16853 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Rejected
This change was deliberate and mentioned in the 2.7.0 release announcement:
```
Non-symbols are allowed as keyword argument keys if the method accepts arbitrary keywords. [Feature #14183]
def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
```
If you want to pass a positional hash in 2.7+, you have to use a hash instead of keywords:
```ruby
def bla(hash = {}, **kw)
puts "H: #{hash}"
puts "K: #{kw}"
end
bla({"some" => "string"})
# H: {"some"=>"string"}
# K: {}
```
----------------------------------------
Bug #16853: calling bla(hash, **kw) with a string-based hash passes the strings into **kw (worked < 2.7)
https://bugs.ruby-lang.org/issues/16853#change-85561
* Author: sylvain.joyeux (Sylvain Joyeux)
* Status: Rejected
* Priority: Normal
* ruby -v: 2.7.1p83
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
The following code
~~~
def bla(hash = {}, **kw)
puts "H: #{hash}"
puts "K: #{kw}"
end
bla "some" => "string"
~~~
**silently** outputs the following (no warnings about deprecation of keyword parameters-from-hash)
~~~
H: {}
K: {"some"=>"string"}
~~~
While 2.6.5 (and versions before it) gave
~~~
H: {"some"=>"string"}
K: {}
~~~
I would expect "the warning" that started appearing in 2.7, and **definitely** not having strings in a keyword argument hash.
--
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>