scala 中的方法重载给出了编译错误不明确的引用
Method overloading in scala gives compilation error ambiguous reference
当我编译此代码时,出现方法 m1
的不明确引用错误。谁能告诉我为什么?
object MyClass {
trait T {
def m1(str: String): Unit = println(str)
def m1: Unit = {
println("m1")
m1("from:m1")
}
}
class C extends T {
override def m1(str: String): Unit = println(str+"1")
}
def main(args: Array[String]): Unit = {
val c = new C()
c.m1
}
}
当您在 main
中调用 C.m1
时,您不包括括号。编译器不知道您是有意调用 arity-0 方法,还是打算使用中缀表示法调用 arity-1 方法,例如 c.m1 "hello"
.
将 c.m1
替换为 c.m1()
将编译。
当我编译此代码时,出现方法 m1
的不明确引用错误。谁能告诉我为什么?
object MyClass {
trait T {
def m1(str: String): Unit = println(str)
def m1: Unit = {
println("m1")
m1("from:m1")
}
}
class C extends T {
override def m1(str: String): Unit = println(str+"1")
}
def main(args: Array[String]): Unit = {
val c = new C()
c.m1
}
}
当您在 main
中调用 C.m1
时,您不包括括号。编译器不知道您是有意调用 arity-0 方法,还是打算使用中缀表示法调用 arity-1 方法,例如 c.m1 "hello"
.
将 c.m1
替换为 c.m1()
将编译。