[ruby-core:122437] [Ruby Feature#21389] Simplify Set#inspect output
From:
"matz (Yukihiro Matsumoto) via ruby-core" <ruby-core@...>
Date:
2025-06-05 08:47:26 UTC
List:
ruby-core #122437
Issue #21389 has been updated by matz (Yukihiro Matsumoto).
I prefer `Set[1, 2, 3]` to `#<Set: {1, 2, 3}>`. And the name of the subclass should be printed, e.g. `MySet[1, 2, 3]`.
Matz.
----------------------------------------
Feature #21389: Simplify Set#inspect output
https://bugs.ruby-lang.org/issues/21389#change-113618
* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
----------------------------------------
As Set is now a core collection class, it should have special inspect output. Ideally, inspect output should be suitable to eval, similar to array and hash (assuming the elements are also suitable to eval):
```ruby
set = Set[1, 2, 3]
eval(set.inspect) == set # should be true
```
The simplest way to do this is to use the Set[] syntax:
```ruby
Set[1, 2, 3].inspect
# => "Set[1, 2, 3]"
```
I've submitted a pull request that implements this: https://github.com/ruby/ruby/pull/13488
The pull request deliberately does not use any subclass name in the output, similar to array and hash. I think it is more important that users know they are dealing with a set than which subclass:
```ruby
Class.new(Set)[]
# PR does: Set[]
# not: #<Class:0x00000c21c78699e0>[]
```
However, it's easy to change the PR to use a subclass name if that is desired.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/