Scala parentesi aggiuntive stampa
Domanda
ho scritto il mio primo programma di esempio Scala e sembra che questo:
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
L'uscita è
applying f1
aprintln
()
done applying f1
Qualcuno può spiegare il motivo per cui appare l'extra ()? Ho pensato solo aprintln sembrerebbe.
grazie,
Jeff
Soluzione
Questo risolverà il problema:
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
(f1 _).apply
println("done applying f1")
}
E così sarà questo:
def main(args: Array[String]) {
def f1 = "aprintln"
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
Che cosa sta succedendo qui è che si sta eseguendo la funzione f1
con la chiamata a apply
. La funzione stampa f1
out 'aprintln', e restituisce ()
. Quindi si passa l'output di f1
, che è ()
, ad un'altra chiamata a println
. È per questo che si vede un paio di Parans sulla console.
Le parentesi vuote hanno l'Unità tipo a Scala, che equivale a decadere in Java.
Altri suggerimenti
I metodi che avrebbero un tipo di ritorno void in Java hanno un tipo di ritorno di unità a Scala. () È come si scrive il valore dell'unità.
Nel codice, le chiamate f1 println direttamente. Così, quando si chiama F1 e passare il suo risultato a println, entrambi di stampare una stringa nel corpo di f1, e stampa il suo risultato, che è tostring'ed come ().