如果方法具有类型参数,则不应用隐式转换

时间:2017-04-13 23:04:11

标签: scala implicit

问题基于讨论here。这是设置:

implicit def CToC2(obj: C1): C2 = {
  new C2()
}

class C1() {
  def f[U](f: (Int, Int) => U): U = f(1, 1)
}

class C2() {
  def f[U](f: ((Int, Int)) => U): U = f(2, 2)
}

我希望尝试使用C2中存在的签名调用该函数,scala会使用隐式转换来满足调用:

val c1 = new C1()
val ff: ((Int, Int)) => Unit = t => println(t._1 + t._2)

但这失败了:

scala> c1.f(ff)
Error:(16, 7) type mismatch;
 found   : ((Int, Int)) => Unit
 required: (Int, Int) => ?

有趣的是,如果我从C1中删除类型参数,它可以正常工作:

class C1() {
  def f(f: (Int, Int) => Unit): Unit = f(1, 1)
}

0 个答案:

没有答案