Сообщение «расходящиеся» немного сбивает с толку, настоящая проблема заключается в непонимании того, как работают классы типов.Вот как это должно выглядеть:
class FooList[T](implicit ord: Ordering[T]) {
}
case class Human(score: Int)
implicit object HumanOrdering extends Ordering[Human] {
def compare(x: Human, y: Human): Int =
x.score.compareTo(y.score)
}
object Main {
def main(args: Array[String]): Unit = {
val h = new Human(100)
val lst = new FooList[Human]()
}
}
Обратите внимание, что класс Human
- это просто простой тип данных.Существует отдельный implicit object
, который реализует упорядочение для Human
объектов путем расширения Ordering[Human]
.
. Главное в классе типов является то, что поведение не является частью исходного класса, а связано с нимсоздание значения implicit
соответствующего типа.Это позволяет вам добавлять несколько классов поведения к классам, не изменяя сам базовый класс.
Обратите внимание, что вы можете поместить этот implicit object
в объект класса, если вы хотите сделать вещи немного чище:
object Human {
implicit object HumanOrdering extends Ordering[Human] {
def compare(x: Human, y: Human): Int =
x.score.compareTo(y.score)
}
}