Comparable mixin 由希望对它的对象进行排序的类使用。同时,这个类必须定义<=>操作符,用于定义这个类如何同接受的另一个对象如何比较,根据是否小于,等于 或大于这个其它对象来决定返回值-1、0、1。Comparable使用<=>来实现常规的比较操作符(<, <=, ==, >=, 与 >)和between?方法。
例如:
class SizeMatters
include Comparable
attr :str
def <=>(anOther)
str.size <=> anOther.str.size
end
def initialize(str)
@str = str
end
def inspect
@str
end
end
s1 = SizeMatters.new("Z")
s2 = SizeMatters.new("YY")
s3 = SizeMatters.new("XXX")
s4 = SizeMatters.new("WWWW")
s5 = SizeMatters.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]
只有在你的类中包含 Comparable 模块,并实现 <=> 操作符,这个类就可获得 Comparable 模块内的其它六种操作。如果需要话,你的类可以实现 succ 方法,那么这个类的所有对象就都可支持 Rang 对象的 each 方法。可参考一下《 Rang 对象》中的例子。