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 -) 10 months ago
#pretty_print also now just uses Set instead of self.class.name.
Updated by zzak (zzak _) 10 months 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) 10 months 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 -) 10 months 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) 10 months 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) 10 months ago
- Related to Feature #21389: Simplify Set#inspect output added
Updated by jeremyevans (Jeremy Evans) 9 months 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