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 -) 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.