Ruby 中的 Comparable 模块


在 Ruby 中,可以用Comparable mixin对可以排序的类实例执行排序。类定义需要包含一个运算符,以将接收者相互比较。运算符将返回 -1、0 或 1。

  • 如果接收者小于另一个对象,则它将返回-1

  • 如果它大于另一个对象,则它将返回1

  • 如果接收者等于另一个对象,则它将返回0

在 Comparable 模块中,运算符<=>用于实现常规比较运算符(*、<=、==、>=>),有时也用作between?方法。

现在我们对 Ruby 中的 Comparable 模块有了一些了解,接下来让我们探索一些相关的示例。

示例 1

考虑如下所示的代码

class TutorialsPoint

# comparable module
include Comparable
attr :key

   def <=>(other_key)
      key.length <=> other_key.key.length
   end

   def initialize(key)
      @key = key
   end
end

# creating objects
a1 = TutorialsPoint.new("T")
a2 = TutorialsPoint.new([3, 6])
a3 = TutorialsPoint.new("tuts")

# comparable operator
puts a1 < a2

# using between? method
puts a2.between?(a1, a3)
puts a3.between?(a1, a2)

输出

true
true
false

在上面的示例中,我们只使用了一个运算符进行比较;还有 5 个这样的运算符可用。

示例 2

考虑如下所示的代码,它描述了使用所有这些比较运算符的情况。

class TutorialsPoint

# comparable module
include Comparable
attr :key

   def <=>(other_key)
      key.length <=> other_key.key.length
   end

   def initialize(key)
      @key = key
   end
end

# creating objects
a1 = TutorialsPoint.new("T")
a2 = TutorialsPoint.new([3, 6])
a3 = TutorialsPoint.new("tuts")

# comparable operators
puts a1 < a2
puts a1 <= a2
puts a1 == a2
puts a1 >= a2
puts a1 > a2

输出

true
true
false
false
false

更新日期:2022 年 1 月 25 日

365 次浏览

启动你的 职业

完成课程即可获得认证

开始
广告