【发布时间】:2010-10-06 06:29:14
【问题描述】:
在某些情况下,我正在使用类型类设计 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:错误:找不到 this.T[this.B] 类型的证据参数的隐式值 呼叫(新B) ^ /private/tmp/tc.scala:28:错误:找不到 this.T[this.B] 类型的证据参数的隐式值 呼叫(b)【问题讨论】:
-
我还尝试将调用的定义更改为: def call[X,X2 <: x x2:t println>
标签: inheritance scala implicit typeclass