是否有一种简单的方法(即使用 spaceship 操作符)基于两个不同的属性在Ruby中定义比较? IE。如果我有一个包含两个属性attr1和attr2的类,是否有一种Rubyesque方式在attr1上比较该类的两个实例,如果它们相等,则在attr2上进行比较?
最佳答案
可比的mixin的全部要点是为飞船(比较)运算符提供一个定义。因此,如果您想对两个属性进行比较,则可以进行比较。这是一个过于冗长的示例:
def <=>(obj)
comparison = self.attr1 <=> obj.attr1
if comparison == 0
return self.attr2 <=> obj.attr2
else
return comparison
end
end
显然,以上假设
attr1
和attr2
都具有针对飞船运算符的定义。同样,您还需要确定什么构成大于和小于,这在两个属性之间可能有点困难。这表明可比性可能不是适用于您的方案的正确代码。一种更简洁和惯用的书写方式是:
def <=>(obj)
self.attr1 <=> obj.attr1 == 0 ? self.attr2 <=> obj.attr2 : self.attr1 <=> obj.attr1
end
关于ruby - Ruby-使用Comparable mixin比较两个不同属性上的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8123676/