问题基于讨论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)
}