【问题标题】:Method overloading in scala gives compilation error ambiguous referencescala中的方法重载给出了编译错误不明确的参考
【发布时间】:2021-08-25 08:22:28
【问题描述】:

当我编译这段代码时,我得到方法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
    }
}

【问题讨论】:

  • 有一些与这个问题相关的问题,例如herehere。希望这些问题能对你有所帮助。
  • 由于第二种方法有副作用,样式指南说它应该定义为def m1(): Unit = {,因此调用站点必须是c.m1(),这应该可以解决歧义问题。
  • @LuisMiguelMejíaSuárez 谢谢。你是对的。

标签: scala overloading


【解决方案1】:

当您在 main 中调用 C.m1 时,您不包含括号。编译器不知道您是有意调用 arity-0 方法,还是打算使用中缀表示法调用 arity-1 方法,例如 c.m1 "hello"

c.m1 替换为c.m1() 将编译。

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多