Я хочу сделать что-то вроде этого:
class Foo extends Ordered[Foo] {
val x
val y
val z
.
.
.
.
def compare(that: Foo) = {
val c0 = this.length compareTo that.length // primary comparison
lazy val c1 = this.x compareTo that.x // secondary comparison
lazy val c2 = this.y.size compareTo that.y.size // tertiary comparison
lazy val c3 = this.z.head compareTo that.z.head // final tie breaker
if (c0 != 0) c0 else if (c1 != 0) c1 else if (c2 != 0) c2 else if (c3 != 0) c3 else c4
}
}
Мне было интересно, есть ли какой-нибудь более чистый способ написать такое. Я ожидаю некоторую вещь как подпись Ordering.multipleBy(ordering: Ordered[A]*)
, которая берет varargs сравниваемых и выбирает сначала ненулевое значение.