[ruby-core:118103] [Ruby master Bug#20513] the feature of kwargs in index methods has been removed without due consideration of utility and compatibility
From:
"Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date:
2024-05-30 15:19:36 UTC
List:
ruby-core #118103
Issue #20513 has been updated by Eregon (Benoit Daloze).
@bughit Yes, see my comments on #20218.
Also in such cases, please try ruby-head it's the best way to know.
And I close this as duplicate of #20218, I don't see any value to split the discussion on two issues.
If you care about this #20218, please add it to the dev meeting as Jeremy said in the first reply here.
----------------------------------------
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-108533
* Author: bughit (bug hit)
* Status: Open
* 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/