使用带有隐式参数

时间:2017-07-04 07:44:28

标签: scala scala-implicits

在以下代码中:

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,所以我修改了我的示例以匹配。除非有人有答案,否则我也可以将其关闭以进行复制。

0 个答案:

没有答案