Project

General

Profile

Actions

Bug #21377

open

core Set#inspect does not use inherited class name

Added by Ethan (Ethan -) 14 days ago. Updated 13 days ago.

Status:
Open
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 (1 open0 closed)

Related to Ruby - Feature #21389: Simplify Set#inspect outputOpenActions

Updated by Ethan (Ethan -) 14 days ago

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

Updated by jeremyevans0 (Jeremy Evans) 14 days ago

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 -) 14 days ago

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) 13 days ago

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.

Actions #6

Updated by Eregon (Benoit Daloze) 9 days ago

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0