【问题标题】:Method is defined twice方法定义了两次
【发布时间】:2017-07-06 15:47:01
【问题描述】:

为什么 scala REPL 不允许在另一个函数中有多个同名的函数?

  def wrapper(): Unit = {
    def a: Unit = ???
    def a(i: Int): Unit = ???
  }

错误:方法 a 被定义了两次

冲突符号都源自文件“”

【问题讨论】:

  • 这是一个有点武断(但很常见)的决定。事实证明,如果你这样做,调试会变得很困难(而且很难想象你为什么想要它)。
  • 我的函数是这样的 getBirthDates(userData: UserData){ isValid(month: String) = month.matches(regexp) && isValid(month.toInt) isValid(month: Int) = month > 0 && month
  • 这种情况是只在 REPL 中发生还是在像往常一样编译源代码时也会发生?
  • 我在Idea中找到了,但是Idea经常编译不出来有效代码,所以我在REPL中尝试了。

标签: scala


【解决方案1】:

看起来你想在一个方法中使用重载(OOP 特性),这不是正确的 OOP 原语,从 OOP 的角度来看它看起来不合理(我同意编译器)。要将其与 OOP 功能对齐,只需将其包装在 object 中:

def wrapper(): Unit = {
  object wr {
    def a: Unit = ???
    def a(i: Int): Unit = ???
  }

  wr.a(10)
  wr.a
}

【讨论】:

  • 好主意,我也可以添加 import wr._ 并只使用 a(10)
猜你喜欢
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2017-10-15
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多