【发布时间】:2015-10-16 04:33:05
【问题描述】:
第一个示例成功地找到了到方法 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 的这种行为是相同的。
有关implicits 的文档似乎没有涵盖这一点,而且我在stackoverflow 上也没有找到这种确切的情况。
请注意,我的目标是重载方法foo - 如果我重命名它,编译器会找到它。
http://docs.scala-lang.org/tutorials/FAQ/finding-implicits.html
【问题讨论】:
-
你为什么要用同一个名字
foo来给那个拉皮条的?也许这很明显,但是如果您将其称为bar,则不会出现错误 -
我知道,但我想重载
foo- 我刚刚更新了问题。
标签: scala type-conversion implicits