类别优先级

时间:2014-02-08 04:46:40

标签: scala typeclass

我有一种情况,我有一个类型参数必须是逆变的参数。如果我有一个为基类和子类定义的隐式对象,我会得到一个“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

1 个答案:

答案 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