[ruby-core:122306] [Ruby Bug#21377] core Set#inspect does not use inherited class name

Issue #21377 has been reported by Ethan (Ethan -). ---------------------------------------- Bug #21377: core Set#inspect does not use inherited class name https://bugs.ruby-lang.org/issues/21377 * 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 ---------------------------------------- Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now. ```ruby class MySet < Set; end MySet.new.inspect # before: #<MySet: {}> # now: #<Set: {}> ``` -- https://bugs.ruby-lang.org/

Issue #21377 has been updated by Ethan (Ethan -). `#pretty_print` also now just uses Set instead of self.class.name. ---------------------------------------- Bug #21377: core Set#inspect does not use inherited class name https://bugs.ruby-lang.org/issues/21377#change-113449 * 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 ---------------------------------------- Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now. ```ruby class MySet < Set; end MySet.new.inspect # before: #<MySet: {}> # now: #<Set: {}> ``` -- https://bugs.ruby-lang.org/

Issue #21377 has been updated by zzak (zzak _). I'm not sure it's intended, but here is a patch: https://github.com/ruby/ruby/pull/13451 ---------------------------------------- Bug #21377: core Set#inspect does not use inherited class name https://bugs.ruby-lang.org/issues/21377#change-113451 * 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 ---------------------------------------- Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now. ```ruby class MySet < Set; end MySet.new.inspect # before: #<MySet: {}> # now: #<Set: {}> ``` -- https://bugs.ruby-lang.org/

Issue #21377 has been updated by jeremyevans0 (Jeremy Evans). It is intended behavior. Core classes generally do not have different output in subclasses (e.g. Hash, Array, String). Now that `Set` is a core class, I think it's worth considering for `Set#inspect` to return a string like: `Set[1, 2, 3]` ---------------------------------------- Bug #21377: core Set#inspect does not use inherited class name https://bugs.ruby-lang.org/issues/21377#change-113455 * 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 ---------------------------------------- Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now. ```ruby class MySet < Set; end MySet.new.inspect # before: #<MySet: {}> # now: #<Set: {}> ``` -- https://bugs.ruby-lang.org/

Issue #21377 has been updated by Ethan (Ethan -). Hash, Array, and String don't say the name of the class in their inspect, though. I'm certainly in favor of `Set[1, 2, 3]` (this is an improvement I make wherever I subclass Set already), but this seems orthogonal to identifying the class of the inspected object. I don't know any classes that show a base class name instead of self.class name. Not terribly important to me since I override inspect anyway, fine by me to close if 'Set' is preferred over class name, but class name seems more correct in my opinion. ---------------------------------------- Bug #21377: core Set#inspect does not use inherited class name https://bugs.ruby-lang.org/issues/21377#change-113458 * 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 ---------------------------------------- Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now. ```ruby class MySet < Set; end MySet.new.inspect # before: #<MySet: {}> # now: #<Set: {}> ``` -- https://bugs.ruby-lang.org/

Issue #21377 has been updated by Eregon (Benoit Daloze). Agreed, if the `inspect` shows the class name, it should show `obj.class.name`, not some superclass which would be very confusing. Otherwise all objects with default inspect would be `#<Object: ..>` and that would be no good. ---------------------------------------- Bug #21377: core Set#inspect does not use inherited class name https://bugs.ruby-lang.org/issues/21377#change-113473 * 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 ---------------------------------------- Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now. ```ruby class MySet < Set; end MySet.new.inspect # before: #<MySet: {}> # now: #<Set: {}> ``` -- https://bugs.ruby-lang.org/
participants (4)
-
Eregon (Benoit Daloze)
-
Ethan (Ethan -)
-
jeremyevans0 (Jeremy Evans)
-
zzak (zzak _)