Project

General

Profile

Actions

Bug #21377

closed

core Set#inspect does not use inherited class name

Bug #21377: core Set#inspect does not use inherited class name

Added by Ethan (Ethan -) 10 months ago. Updated 9 months ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-05-26T17:42:35Z master 909a0daab6) +PRISM [x86_64-darwin22]
[ruby-core:122306]

Description

Following #21216, Set#inspect stopped using self.class.name and just uses 'Set' now.

class MySet < Set; end
MySet.new.inspect
# before: #<MySet: {}>
# now: #<Set: {}>

Related issues 1 (0 open1 closed)

Related to Ruby - Feature #21389: Simplify Set#inspect outputClosedjeremyevans0 (Jeremy Evans)Actions

Updated by Ethan (Ethan -) 10 months ago Actions #1 [ruby-core:122307]

#pretty_print also now just uses Set instead of self.class.name.

Updated by zzak (zzak _) 10 months ago Actions #2 [ruby-core:122309]

I'm not sure it's intended, but here is a patch:
https://github.com/ruby/ruby/pull/13451

Updated by jeremyevans0 (Jeremy Evans) 10 months ago Actions #3 [ruby-core:122313]

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]

Updated by Ethan (Ethan -) 10 months ago Actions #4 [ruby-core:122317]

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.

Updated by Eregon (Benoit Daloze) 10 months ago Actions #5 [ruby-core:122325]

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.

Updated by Eregon (Benoit Daloze) 10 months ago Actions #6

Updated by jeremyevans (Jeremy Evans) 9 months ago Actions #7

  • Status changed from Open to Closed

Applied in changeset git|7c3bbfcddb05b0eb7cca7ac32efd2fc07e1af6ec.


Include Set subclass name in Set#inspect output

Fixes [Bug #21377]

Co-authored-by: zzak

Actions

Also available in: PDF Atom