是否有一种简单的方法(即使用太空船操作员)根据两个不同的属性在Ruby中定义比较?即如果我有一个包含两个属性attr1和attr2的类,是否有一种Rubyesque方法来比较attr1上这个类的两个实例,如果它们相等,那么在attr2上比较它们?
ste*_*lag 14
这是一种易于扩展(更多属性)的方式:
def <=>(other)
[self.attr1, self.attr2] <=> [other.attr1, other.attr2]
end
Run Code Online (Sandbox Code Playgroud)
可比混合的重点是为太空船(比较)运营商提供定义.因此,如果您想跨两个属性进行比较,那就去做吧.这是一个过于冗长的例子:
def <=>(obj)
comparison = self.attr1 <=> obj.attr1
if comparison == 0
return self.attr2 <=> obj.attr2
else
return comparison
end
end
Run Code Online (Sandbox Code Playgroud)
显然上面假设attr1,并且attr2两者都有航天器运营商的定义.同样,你需要确定什么构成大于,小于两个属性可能有点困难.这表明可比较可能不是您的方案的正确代码.
def <=>(obj)
self.attr1 <=> obj.attr1 == 0 ? self.attr2 <=> obj.attr2 : self.attr1 <=> obj.attr1
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |