ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:122355] [Ruby Feature#21389] Simplify Set#inspect output
@ 2025-06-01  3:36 jeremyevans0 (Jeremy Evans) via ruby-core
  2025-06-01 19:55 ` [ruby-core:122363] " Eregon (Benoit Daloze) via ruby-core
  2025-06-05  8:47 ` [ruby-core:122437] " matz (Yukihiro Matsumoto) via ruby-core
  0 siblings, 2 replies; 3+ messages in thread
From: jeremyevans0 (Jeremy Evans) via ruby-core @ 2025-06-01  3:36 UTC (permalink / raw)
  To: ruby-core; +Cc: jeremyevans0 (Jeremy Evans)

Issue #21389 has been reported by jeremyevans0 (Jeremy Evans).

----------------------------------------
Feature #21389: Simplify Set#inspect output
https://bugs.ruby-lang.org/issues/21389

* 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/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:122363] [Ruby Feature#21389] Simplify Set#inspect output
  2025-06-01  3:36 [ruby-core:122355] [Ruby Feature#21389] Simplify Set#inspect output jeremyevans0 (Jeremy Evans) via ruby-core
@ 2025-06-01 19:55 ` Eregon (Benoit Daloze) via ruby-core
  2025-06-05  8:47 ` [ruby-core:122437] " matz (Yukihiro Matsumoto) via ruby-core
  1 sibling, 0 replies; 3+ messages in thread
From: Eregon (Benoit Daloze) via ruby-core @ 2025-06-01 19:55 UTC (permalink / raw)
  To: ruby-core; +Cc: Eregon (Benoit Daloze)

Issue #21389 has been updated by Eregon (Benoit Daloze).


Per https://bugs.ruby-lang.org/issues/21377#note-5 (that issue should have been linked BTW, I added it),
I strongly believe showing `Set[1, 2, 3]` instead of `MySet[1, 2, 3]` for an instance of MySet would be a mistake.

Array and Hash don't show the class name at all, then sure obviously they don't show the subclass name either.
No `inspect`, if it shows the class name, should ever show the wrong class name, i.e., not `obj.class.inspect`, that would just be intentional confusion and there is no reason for that.

The example with an anonymous subclass is unrepresentative of realistic usages so hardly matters in comparison.

BTW here is an example of a core class showing the subclass name:
```ruby
class MyModule < Module; end
p MyModule.new # => #<MyModule:0x00007f4e318e3ad8>
```

----------------------------------------
Feature #21389: Simplify Set#inspect output
https://bugs.ruby-lang.org/issues/21389#change-113508

* 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/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ruby-core:122437] [Ruby Feature#21389] Simplify Set#inspect output
  2025-06-01  3:36 [ruby-core:122355] [Ruby Feature#21389] Simplify Set#inspect output jeremyevans0 (Jeremy Evans) via ruby-core
  2025-06-01 19:55 ` [ruby-core:122363] " Eregon (Benoit Daloze) via ruby-core
@ 2025-06-05  8:47 ` matz (Yukihiro Matsumoto) via ruby-core
  1 sibling, 0 replies; 3+ messages in thread
From: matz (Yukihiro Matsumoto) via ruby-core @ 2025-06-05  8:47 UTC (permalink / raw)
  To: ruby-core; +Cc: matz (Yukihiro Matsumoto)

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/

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-06-05  8:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-06-01  3:36 [ruby-core:122355] [Ruby Feature#21389] Simplify Set#inspect output jeremyevans0 (Jeremy Evans) via ruby-core
2025-06-01 19:55 ` [ruby-core:122363] " Eregon (Benoit Daloze) via ruby-core
2025-06-05  8:47 ` [ruby-core:122437] " matz (Yukihiro Matsumoto) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).