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

È stato utile?

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 ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top