From: daniel@...42.com Date: 2020-07-02T16:31:57+00:00 Subject: [ruby-core:99033] [Ruby master Bug#16853] calling bla(hash, **kw) with a string-based hash passes the strings into **kw (worked < 2.7) Issue #16853 has been updated by Dan0042 (Daniel DeLorme). > > The reason why it was changed is because there are some methods that want to accept both symbol and non-symbol keys: where(id: 42) and where("table.id" => 42). > > So, because Rails. I was guessing that it would be the driver. The idea for that change first appeared in https://bugs.ruby-lang.org/issues/14183#note-45 And the reason appears to be "because Matz thought it would be cool". I didn't really see anything about Rails in there, nor did I see anything about why you'd want to change `where("table.id" => 1)` to keyword arguments. ---------------------------------------- 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-86408 * 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: