Por que a resolução implícita do Scala falha no método sobrecarregado com o parâmetro type?
O primeiro exemplo encontra com êxito a conversão implícita no métodofoo(String)
, no entanto, assim que eu adicionar um parâmetro de tipo (consultefails
) as compilações não resolvem mais:
object works {
class A {
def foo(): String = ???
}
implicit class PimpedA(a: A) {
def foo(i: String): String = ???
}
val a = new A()
a.foo("test") //compiles
}
object fails { //same as `works`, but adds type parameter
class A {
def foo[T](): String = ???
}
implicit class PimpedA(a: A) {
def foo[T](i: String): String = ???
}
val a = new A()
PimpedA(a).foo("test") // compiles
a.foo("test") // error: too many arguments for method foo: ()String
}
Esse comportamento é o mesmo para Scala 2.11.7 e 2.12.0-M3.
A documentação sobre implícitos não parece cobrir isso e eu não encontrei esse caso exato no stackoverflow.
Observe que meu objetivo é sobrecarregar o métodofoo
- se eu renomeá-lo, o compilador o encontra.
http://docs.scala-lang.org/tutorials/FAQ/finding-implicits.html