Actions
Feature #16995
closedSets: <=> should be specialized
Status:
Closed
Assignee:
-
Target version:
-
Description
This is quite minor, but Set#<=>
should be refined.
Reminder: Set
defines <
, >
, etc. as inclusion, but does not have a corresponding <=>
:
Set[1] < Set[1, 2] # => true
Set[1] <=> Set[1, 2] # => nil, should be -1
Set[1] <=> Set[2] # => nil, ok, not orderable
The official stated reason for Set
to not implement is that some sets are not comparable. That is exactly what nil
result type is for IMO. Sets are partically ordered and <=>
should reflect that. https://en.wikipedia.org/wiki/Partially_ordered_set
Set[1] < Set[1, 2] # => true
[Set[1], Set[1, 2]].sort # => ArgumentError, should be [Set[1], Set[1, 2]]
[Set[1], Set[2]].sort # => ArgumentError, ok, can't be ordered
This is exactly the same idea as Class
, which correctly refines <=>
:
Array < Enumerable # => true
Array <=> Enumerable # => -1, ok
[Array, Enumerable].sort # => [Array, Enumerable]
[Array, String].sort # => ArgumentError (comparison of Class with Class failed), ok
Updated by marcandre (Marc-Andre Lafortune) over 4 years ago
- Related to Feature #16989: Sets: need ♥️ added
Updated by zverok (Victor Shepelev) almost 2 years ago
- Status changed from Open to Closed
Implemented in Ruby 3.0:
Set[1] <=> Set[1, 2]
# => -1
[Set[1], Set[1, 2]].sort
# => [#<Set: {1}>, #<Set: {1, 2}>]
Actions
Like0
Like0Like0