On this page
Maintenance Ruby 3.3 gets fixes, but no new features. Switch to Ruby 4.0 →
Comparable
The Comparable mixin is used by classes whose objects may be ordered. The class must define the <=> operator, which compares the receiver against another object, returning a value less than 0, returning 0, or returning a value greater than 0, depending on whether the receiver is less than, equal to, or greater than the other object. If the other object is not comparable then the <=> operator should return nil. Comparable uses <=> to implement the conventional comparison operators (<, <=, ==, >=, and >) and the method between?.
class StringSorter include Comparable attr :str def <=>(other) str.size <=> other.str.size end def initialize(str) @str = str end def inspect @str end end s1 = StringSorter.new("Z") s2 = StringSorter.new("YY") s3 = StringSorter.new("XXX") s4 = StringSorter.new("WWWW") s5 = StringSorter.new("VVVVV") s1 < s2 #=> true s4.between?(s1, s3) #=> false s4.between?(s3, s5) #=> true [ s3, s2, s5, s4, s1 ].sort #=> [Z, YY, XXX, WWWW, VVVVV]
What’s Here
Module Comparable provides these methods, all of which use method <=>:
-
<: Returns whetherselfis less than the given object. -
<=: Returns whetherselfis less than or equal to the given object. -
==: Returns whetherselfis equal to the given object. -
>: Returns whetherselfis greater than the given object. -
>=: Returns whetherselfis greater than or equal to the given object. -
between?: Returnstrueifselfis between two given objects. -
clamp: For given objectsminandmax, or range(min..max), returns:-
minif(self <=> min) < 0. -
maxif(self <=> max) > 0. -
selfotherwise.
-