Bug #21377
opencore Set#inspect does not use inherited class name
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.