有没有办法在选择最具体的类型类中拥有多个合适的替代方案,而不产生发散的隐式扩展?它看起来像这样
trait A
trait B extends A
case class C extends B
trait Tester[-T] {def test (t : T) : Boolean}
object Tester{
def test[T] (t : T)(implicit tester : Tester[T]) = tester.test(t)
implicit def ATester = new Tester[A] {
override def test (a : A) = true
}
implicit def BTester = new Tester[B] {
override def test (b : B) = false
}
}
val c = C()
Tester.test(c)
我希望这产生错误,因为在继承层次结构中 C 更接近 B 而不是 A 。