下面的代码给出了一个错误。
class Base { }
class Sub extends Base { }
class Writer[-T] {
def write(t: T) { }
}
object AmbImplicits {
implicit object BaseWriter extends Writer[Base]
implicit object SubWriter extends Writer[Sub]
def foo[T](t: T)(implicit ev: Writer[T]) {
println(s"foo $t $ev")
}
def main(args: Array[String]) {
val base = new Base
val sub = new Sub
foo(base)
foo(sub)
}
}
错误:
/Workspace/AmbImplicits.scala:24: error: ambiguous implicit values:
both object SubWriter in object AmbImplicits of type AmbImplicits.SubWriter.type
and object BaseWriter in object AmbImplicits of type AmbImplicits.BaseWriter.type
match expected type Writer[Sub]
foo(sub)
^
在我的真实代码中,显式传递隐式参数并不是那么简单。有没有办法告诉它总是更喜欢SubWriter
,BaseWriter
因为前者更具体?无需手动传递它foo(sub)(SubWriter)
吗?