В некоторых случаях я разрабатываю API с использованием классов типов, однако я столкнулся с проблемой неявного разрешения.Как показано ниже, если существует неявный объект для типа A, но объект типа B extends A
передается методу, то неявный объект не может быть найден.Есть ли способ заставить это работать, или вызывающие абоненты должны помещать неявные объекты в область действия для каждого подкласса?
Вот пример:
class A
class B extends A
class T[+X]
object T {
implicit object TA extends T[A]
}
def call[X:T](x:X) = println(x)
// compiles
call(new A)
// doesn't compile
call(new B)
var a = new A
// compiles
call(a)
a = new B
// compiles
call(a)
val b = new B
// doesn't compile
call(b)
Это не скомпилируется со следующим выводом:
/private/tmp/tc.scala:16: error: could not find implicit value for evidence parameter of type this.T[this.B]
call(new B)
^
/private/tmp/tc.scala:28: error: could not find implicit value for evidence parameter of type this.T[this.B]
call(b)