问题是基于这里的讨论.这是设置:
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)
}
Run Code Online (Sandbox Code Playgroud)
我希望尝试C2使用存在的签名来调用函数,scala会使用隐式转换来满足调用:
val c1 = new C1()
val ff: ((Int, Int)) => Unit = t => println(t._1 + t._2)
Run Code Online (Sandbox Code Playgroud)
但这失败了:
scala> c1.f(ff)
Error:(16, 7) type mismatch;
found : ((Int, Int)) => Unit
required: (Int, Int) => ?
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我删除类型参数C1,它可以正常工作:
class C1() {
def f(f: (Int, Int) => Unit): Unit = f(1, 1)
}
Run Code Online (Sandbox Code Playgroud)