A conversão implícita não é aplicada se um método tiver o parâmetro type
A questão é baseada na discussãoaqui. Esta é a configuração:
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)
}
Eu esperaria que tentar chamar a função com uma assinatura existente emC2
, scala usaria a conversão implícita para atender a chamada:
val c1 = new C1()
val ff: ((Int, Int)) => Unit = t => println(t._1 + t._2)
Mas isso falha:
scala> c1.f(ff)
Error:(16, 7) type mismatch;
found : ((Int, Int)) => Unit
required: (Int, Int) => ?
Curiosamente, se eu largar o parâmetro type deC1
, Funciona bem:
class C1() {
def f(f: (Int, Int) => Unit): Unit = f(1, 1)
}