[ruby-core:122364] [Ruby Bug#21375] Set[] does not call #initialize
From:
"Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date:
2025-06-01 20:03:48 UTC
List:
ruby-core #122364
Issue #21375 has been updated by Eregon (Benoit Daloze).
IMO this is unnecessarily breaking compatibility.
If we don't want to support subclasses of Set properly as it used to work (and calling `initialize` is I think a totally reasonable assumption, especially for any library which used to be written in Ruby), then I think we should forbid subclassing Set entirely to make it clear.
----------------------------------------
Bug #21375: Set[] does not call #initialize
https://bugs.ruby-lang.org/issues/21375#change-113509
* Author: Ethan (Ethan -)
* Status: Open
* ruby -v: ruby 3.5.0dev (2025-05-26T17:42:35Z master 909a0daab6) +PRISM [x86_64-darwin22]
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
I have a subclass of Set that overrides #initialize. Following #21216, .new does call #initialize but .[] does not.
```ruby
class MySet < Set
def initialize(enum = nil)
compare_by_identity
super
end
end
MySet.new.compare_by_identity?
# => true
MySet[].compare_by_identity?
# => false
```
--
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/lists/ruby-core.ml.ruby-lang.org/