Bug #21377
closedcore 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 -) about 1 month ago
#pretty_print
also now just uses Set instead of self.class.name.
Updated by zzak (zzak _) about 1 month 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) about 1 month 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 1 month 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 1 month 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.
Updated by Eregon (Benoit Daloze) about 1 month ago
- Related to Feature #21389: Simplify Set#inspect output added
Updated by jeremyevans (Jeremy Evans) 7 days ago
- Status changed from Open to Closed
Applied in changeset git|7c3bbfcddb05b0eb7cca7ac32efd2fc07e1af6ec.
Include Set subclass name in Set#inspect output
Fixes [Bug #21377]
Co-authored-by: zzak zzak@hey.com