Почему перегрузка метода не работает внутри другого метода? - PullRequest
12 голосов
/ 26 сентября 2011

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

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

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

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

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

1 Ответ

10 голосов
/ 26 сентября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...