Scala zusätzlichen Klammern Ausdruck
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
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.