📜  红宝石 |可比模块

📅  最后修改于: 2022-05-13 01:55:39.655000             🧑  作者: Mango

红宝石 |可比模块

在 Ruby 中,Comparable 的mixin被对象可以被排序的类使用。必须使用将接收者与另一个对象进行比较的运算符来定义该类。它将根据接收者返回-1、0 和 1 。如果接收者小于另一个对象,则返回-1,如果接收者等于另一个对象,则返回0。如果接收者大于另一个对象,则返回1。可比模块使用<=>来实现常规的运算符(=,和>)和方法之间?

例子:

# Ruby program to illustrate 
# comparable module
  
class Geeksforgeeks
      
# include comparable module
include Comparable
attr :name
      
    def <=>(other_name)
        name.length <=> other_name.name.length
    end
      
    def initialize(name)
        @name = name
    end
end
  
# creating objects
a1 = Geeksforgeeks.new("G")
a2 = Geeksforgeeks.new([3, 5])
a3 = Geeksforgeeks.new("geeks")
  
# using comparable operator
p a1 < a2 
  
# using between? method
p a2.between?(a1, a3) 
p a3.between?(a1, a2) 

输出:

true
true
false

实例方法

  • < :它根据接收者的方法比较两个对象,如果返回 -1 则返回 true,否则返回 false。
    obj
  • <= :它根据接收者的方法比较两个对象,如果返回 -1 或 0 则返回 true,否则返回 false。
    obj<=other_obj
  • == :它根据接收者的方法比较两个对象,如果返回 0 则返回 true,否则返回 false。
    obj==other_obj
  • > :它根据接收者的方法比较两个对象,如果返回 1 则返回 true,否则返回 false。
    obj>other_obj
  • >= :它根据接收者的方法比较两个对象,如果返回 1 或 0 则返回 true,否则返回 false。
    obj>=other_obj

    例子:

    # Ruby program to illustrate 
    # use of comparisons
       
    # defining class
    class Geeksforgeeks
       
    # include comparable module
    include Comparable
    attr :name
          
        def <=>(other_name)
            name.length <=> other_name.name.length
        end
          
        def initialize(name)
            @name = name
        end
    end
       
    # creating objects
    a1 = Geeksforgeeks.new("G")
    a2 = Geeksforgeeks.new("geeks")
       
       
    # using < operator
    p a1 < a2 
      
    # using <= operator
    p a1 <= a2 
      
    # using == operator
    p a1 == a2 
      
    # using >= operator
    p a1 >= a2 
      
    # using > operator
    p a1 > a2 
    

    输出:

    true
    true
    false
    false
    false
    
  • 之间? :如果 obj <=> min 小于或 obj <=> max 大于零,则此方法返回 false。否则,它返回真。
    obj.between?(min, max)

    例子:

    # Ruby program to illustrate 
    # use of between?  method
      
    # using between? method
    p 7.between?(2, 6) 
    p 'geeks'.between?('geeks', 'gfg')
    

    输出:

    false
    true
    

参考: https://ruby-doc.org/core-2.2.0/Comparable.html