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() 将编译。