Actions
Feature #16995
openSets: <=> should be specialized
Status:
Open
Priority:
Normal
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
Related issues
Updated by marcandre (Marc-Andre Lafortune) 10 months ago
- Related to Feature #16989: Sets: need ♥️ added
Actions