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>