Frage

Ich schrieb meine erste Probe scala Programm, und es sieht wie folgt aus:

def main(args: Array[String]) {     
    def f1 = println("aprintln")
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

Die Ausgabe ist

applying f1
aprintln
()
done applying f1

erklären kann jemand, warum die extra () angezeigt wird? Ich dachte nur, aprintln scheint.

Danke,

Jeff

War es hilfreich?

Lösung

Das wird das Problem beheben:

def main(args: Array[String]) {         
    def f1 = println("aprintln")
    println("applying f1")
    (f1 _).apply
    println("done applying f1")
}

Und so wird diese:

def main(args: Array[String]) {         
    def f1 = "aprintln"
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

Was ist denn hier los ist, dass Sie die Ausführung der Funktion f1 mit dem Aufruf von apply. Die Funktion f1 ausdruckt ‚aprintln‘ und kehrt (). Sie passieren dann die Ausgabe von f1, die () ist, auf einen anderen Anruf zu println. Deshalb sollten Sie ein zusätzliches Paar Parans auf der Konsole zu sehen.

Die leeren Klammern haben den Typ Einheit in Scala, das entspricht in Java für ungültig zu erklären.

Andere Tipps

Methoden, die einen Rückgabetyp void in Java haben eine Rückgabetyp Einheit in Scala haben würde. () Ist, wie Sie den Wert der Einheit schreiben.

In Ihrem Code, println f1 Anrufe direkt. Also, wenn Sie f1 anrufen und ihr Ergebnis println passieren, sowohl Sie eine Zeichenfolge im Körper von f1 drucken, und das Ergebnis drucken, die als () tostring'ed wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top