From: "ufuk (Ufuk Kayserilioglu) via ruby-core" Date: 2024-05-30T16:59:03+00:00 Subject: [ruby-core:118108] [Ruby master Bug#20513] the feature of kwargs in index methods has been removed without due consideration of utility and compatibility Issue #20513 has been updated by ufuk (Ufuk Kayserilioglu). For what it's worth: @bughit, as a side-observer of this thread and the previous discussion on #20218, it feels like your engagement in these discussions aren't very healthy. It is quite obvious that you feel strongly about the topic at hand, but despite multiple people telling what the proper process for arbitrating these kinds of decisions is (hint: keep the conversation on the original ticket, and add it to the dev meeting agenda), you seem to want to continue telling everyone what a huge mistake it was in the first place and not follow the guidance. It is pretty obvious what everyone's positions are on the matter, so all that can happen is for @matz to make a decision after a discussion at the dev meeting. I (personally) don't think extending this thread will change anyone's minds nor result in any healthy conversation. As I said before, this is just my personal observation for what it is worth. ---------------------------------------- Bug #20513: the feature of kwargs in index methods has been removed without due consideration of utility and compatibility https://bugs.ruby-lang.org/issues/20513#change-108541 * Author: bughit (bug hit) * Status: Closed * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- See #20218 The ability to pass kwargs to index methods has been in ruby for a long time, probably from the inception of kwargs, so there's code that makes use of it. Other than the multiple assignment edge-case it's been working fine and is not conceptually unsound. kwargs allow for more variability in store/lookup operations via index methods, letting you control where/how something is stored/looked up. this is from 2.6 ```ruby module IndexTest @store = {} def self.store @store end def self.key(name, namespace: nil) name = "#{namespace}:#{name}" if namespace name end def self.[](name, namespace: nil) p [name, namespace] @store[key(name, namespace: namespace)] end def self.[]=(name, opts = {}, val) p [name, opts, val] @store[key(name, namespace: opts[:namespace])] = val end end IndexTest['foo'] = 1 p IndexTest['foo'] IndexTest['foo', namespace: 'bar'] = 2 p IndexTest['foo', namespace: 'bar'] p IndexTest.store ``` A reasonable breaking change would be for `[]=` to have real kwargs, rather than the middle positional kwarg collector hash in the above example. I am not arguing that breaking changes can't be introduced, but that a removal of a long-standing feature deserves more consideration and deliberation than the following: > I found that use of keyword arguments in multiple assignment is broken > Can we also prohibit keyword arguments ... ? > OK, prohibit keyword arguments -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/