Почему неявное разрешение Scala не выполняется для перегруженного метода с параметром типа?
Первый пример успешно находит неявное преобразование в методfoo(String)
Однако, как только я добавлю параметр типа (см.fails
) компиляция больше не разрешает это:
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
}
Это поведение одинаково для Scala 2.11.7 и 2.12.0-M3.
Документация по последствиям, кажется, не покрывает это, и я не нашел этого точного случая в stackoverflow.
Обратите внимание, что моя цель - перегрузить методfoo
- если я переименую его, компилятор найдет его.
http://docs.scala-lang.org/tutorials/FAQ/finding-implicits.html