Ruby | Comparable Module
In Ruby, the mixin of Comparable is used by the class whose objects may be ordered. The class must be defined using an operator which compare the receiver against another object. It will return -1, 0, and 1 depending upon the receiver. If the receiver is less than another object, then it returns -1, if the receiver is equal to another object, then it returns 0. If the receiver is greater than another object, then it returns 1. Comparable module use <=> to implement the conventional comparison operators(<, <=, ==, >=, and >) and the method between?
Example:
# Ruby program to illustrate # comparable module class Geeksforgeeks # include comparable moduleinclude Comparableattr :name def <=>(other_name) name.length <=> other_name.name.length end def initialize(name) @name = name endend # creating objectsa1 = Geeksforgeeks.new("G")a2 = Geeksforgeeks.new([3, 5])a3 = Geeksforgeeks.new("geeks") # using comparable operatorp a1 < a2 # using between? methodp a2.between?(a1, a3) p a3.between?(a1, a2) |
Output:
true true false
Instance Method
- < : It compares two objects based on the receiver’s method and return true if it return -1 otherwise return false.
obj<other_obj
- <= : It compares two objects based on the receiver’s method and return true if it return -1 or 0 otherwise return false.
obj<=other_obj
- == : It compares two objects based on the receiver’s method and return true if it return 0 otherwise return false.
obj==other_obj
- > : It compares two objects based on the receiver’s method and return true if it return 1 otherwise return false.
obj>other_obj
- >= : It compares two objects based on the receiver’s method and return true if it return 1 or 0 otherwise return false.
obj>=other_obj
Example:
# Ruby program to illustrate # use of comparisons # defining classclass Geeksforgeeks # include comparable moduleinclude Comparableattr :name def <=>(other_name) name.length <=> other_name.name.length end def initialize(name) @name = name endend # creating objectsa1 = Geeksforgeeks.new("G")a2 = Geeksforgeeks.new("geeks") # using < operatorp a1 < a2 # using <= operatorp a1 <= a2 # using == operatorp a1 == a2 # using >= operatorp a1 >= a2 # using > operatorp a1 > a2 |
Output:
true true false false false
obj.between?(min, max)
Example:
# Ruby program to illustrate # use of between? method # using between? methodp 7.between?(2, 6) p 'geeks'.between?('geeks', 'gfg') |
Output:
false true
Reference: https://ruby-doc.org/core-2.2.0/Comparable.html


Please Login to comment...