Почему перегрузка метода не работает внутри другого метода? - программирование

Почему перегрузка метода не работает внутри другого метода?

В классе или объекте это работает:

def a(s:String) {}
def a(s:Int) {}

Но если он помещен внутри другого метода, он не компилируется:

def something() {
  def a(s:String) {}
  def a(s:Int) {}
}

Почему это так?

4b9b3361

Ответ 1

Обратите внимание, что вы можете добиться того же результата, создав объект:

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

В вашем примере вы определяете локальные функции. В моем примере я объявляю методы. Статическая перегрузка разрешена для объектов, классов и свойств.

Я не знаю, почему это не разрешено для локальных функций, но я предполагаю, что перегрузка является возможным источником ошибок и, вероятно, не очень полезна внутри блока кода (где, предположительно, вы можете использовать разные имена для этой области блока). Я предполагаю, что это разрешено в классах, потому что это разрешено в Java.