在以下代码中:
trait Foo[T] {
def get: T
}
implicit object FooInt extends Foo[Int] {
override def get = 0
}
implicit object FooString extends Foo[String] {
override def get = "0"
}
def fooImplicitGetter[T](implicit ev: Foo[T]): T = ev.get
val x: Int = fooImplicitGetter // Does not compile; ambiguous implicit values error
implicit val int = 0
implicit val string = ""
def implicitGetter[T](implicit ev: T): T = ev
val y: Int = implicitGetter // Compiles just fine
在x
的赋值中,为什么编译器不能推断出fooImplicitGetter的类型是Int
,因此它需要使用FooInt
实例,因为它可以在y
的分配?除了fooImplicitGetter[Int]
,明确传递FooInt
等之外,还有什么方法可以帮助它吗?如果重要,则低于2.11。
编辑:这似乎与此处提到的问题相同:Inferring type of generic implicit parameter from return type,所以我修改了我的示例以匹配。除非有人有答案,否则我也可以将其关闭以进行复制。