
Issue #21375 has been updated by Dan0042 (Daniel DeLorme). Ethan (Ethan -) wrote in #note-3:
My feeling is that the base expectation is that #initialize is called on new objects.
I agree. `Array[*args]` is equivalent to `Array.new.concat(*args)` and in that case there was no need to call #initialize because it's a no-op when there are no arguments. But the side-effect of that optimization is that `MyArray[*args]` does not call #initialize when it should, and I consider that a bug. It would be better to fix that bug in `Array` rather than introduce it in `Set` just to keep things "consistent". ---------------------------------------- Bug #21375: Set[] does not call #initialize https://bugs.ruby-lang.org/issues/21375#change-113794 * 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/