我遇到的情况是我的类型类的参数必须是互变的。如果我为基类和子类都定义了一个隐式对象,则会收到“模棱两可”的错误,它不知道选择哪个隐式对象。有没有办法确定隐式对象的优先级?我已经看到了隐式转换的优先级示例,但没有看到类型类的优先级示例。谢谢
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
你的意思是?
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句