Project

General

Profile

Actions

Bug #21377

open

core Set#inspect does not use inherited class name

Added by Ethan (Ethan -) 2 days ago. Updated 1 day 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: {}>

Updated by Ethan (Ethan -) 2 days ago

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

Updated by zzak (zzak _) 2 days ago

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

Updated by jeremyevans0 (Jeremy Evans) 2 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 -) 1 day 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) 1 day 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

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0