为什么方法重载在另一个方法中不起作用?

Rog*_*ach 12 scala

在类或对象体中,这适用:

def a(s:String) {}
def a(s:Int) {}
Run Code Online (Sandbox Code Playgroud)

但是如果将它放在另一个方法中,它就不会编译:

def something() {
  def a(s:String) {}
  def a(s:Int) {}
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

huy*_*hjl 10

请注意,您可以通过创建对象来获得相同的结果:

def something() {
  object A {
    def a(s:String) {}
    def a(i: Int) {}
  }
  import A._
  a("asd")
  a(2)
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您定义了本地函数.在我的例子中,我正在声明方法.对象,类和特征允许静态重载.

我不知道为什么它不允许本地函数,但我的猜测是重载是一个可能的错误来源,并且在代码块中可能不是很有用(可能你可以在该块作用域中使用不同的名称).我认为它在类中是允许的,因为它在Java中是允许的.