Я хотел бы использовать классы типов, чтобы обеспечить специализированную реализацию для универсального класса.Беда в том, что класс рекурсивен, и я не нашел способа написать код, чтобы он работал.Вот моя попытка:
object Compare {
trait Compare[T <: Compare[T]] {
def compare(that: T): Boolean
}
trait IsCompare[T] {
def check: Boolean
}
trait LowerLevelImplicits {
implicit def defaultCompare[T]: IsCompare[T] = new IsCompare[T] {
def check = false
}
}
trait Implicits extends LowerLevelImplicits {
implicit def isCompare[T: Compare]: IsCompare[T] = new IsCompare[T] {
def check = true
}
}
case class MyClass(value: Int) extends Compare[MyClass] {
override def compare(that: MyClass) = this equals that
}
}
import Compare._
object Main extends App with Implicits {
def matchArray[T: IsCompare](array: Array[T]) = {
if (implicitly[IsCompare[T]].check) {
println("Using isCompare")
} else {
println("Not using isCompare")
}
}
}
Ошибка:
Ошибка: (17, 29) аргументы типа [T] не соответствуют чертам границ параметра типа сравнения [T]<: Compare.Compare [T]] </p>
implicit def isCompare[T: Compare]: IsCompare[T] = new IsCompare[T] {