我有一种情况,我有一个类型参数必须是逆变的参数。如果我有一个为基类和子类定义的隐式对象,我会得到一个“ambigious”错误,它不知道选择哪个隐式对象。有没有办法确定隐含对象的优先级?我已经看到了隐式转换的优先级示例,但从未见过类型类。感谢
trait Coded[-X] { // contravariant
val x: Int
}
def printCode[O1](p1: O1)(implicit ev: Coded[O1]) =
println(ev.x)
class Baseclass
class Subclass extends Baseclass
object TEST {
implicit object code1 extends Coded[Baseclass] { val x = 5 }
implicit object code2 extends Coded[Subclass ] { val x = 6 }
}
import TEST._
printCode(new Subclass) // error: ambiguous
答案 0 :(得分:4)
scala> trait Low { implicit object code1 extends Coded[Baseclass] { val x = 5 } }
defined trait Low
scala> object TEST extends Low { implicit object code2 extends Coded[Subclass ] { val x = 6 } }
defined object TEST
scala> import TEST._
import TEST._
scala> printCode(new Subclass)
6