12 Stimmen

Warum funktioniert die Methodenüberladung nicht innerhalb einer anderen Methode?

In der Klasse oder im Objektkörper funktioniert das:

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

Aber wenn es innerhalb einer anderen Methode platziert wird, kompiliert es nicht:

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

Warum ist das so?

10voto

huynhjl Punkte 41112

Beachten Sie, dass Sie das gleiche Ergebnis erzielen können, indem Sie ein Objekt erstellen:

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

In Ihrem Beispiel definieren Sie lokale Funktionen. In meinem Beispiel deklariere ich Methoden. Statische Überladung ist für Objekte, Klassen und Traits erlaubt.

Ich weiß nicht, warum es für lokale Funktionen nicht erlaubt ist, aber ich vermute, dass Überladung eine mögliche Fehlerquelle ist und wahrscheinlich nicht sehr nützlich innerhalb eines Codeblocks ist (wo Sie wahrscheinlich verschiedene Namen in diesem Blockbereich verwenden können). Ich gehe davon aus, dass es in Klassen erlaubt ist, weil es in Java erlaubt ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X