Project

General

Profile

Actions

Bug #21377

open

core Set#inspect does not use inherited class name

Added by Ethan (Ethan -) 1 day ago. Updated about 15 hours 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 -) 1 day ago

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

Updated by zzak (zzak _) 1 day 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) 1 day 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 -) about 18 hours 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) about 15 hours 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