Comparable模块

本文介绍了一个 Ruby 类如何通过包含 Comparable 模块并实现 <=> 方法来进行对象排序。通过示例展示了如何定义自定义类型的大小比较逻辑,并利用此逻辑实现 sort 和 between? 方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 对象》中的例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值