E 'possibile specificare il tipo di ritorno di una funzione anonima, a Scala?
-
21-09-2019 - |
Domanda
So che è possibile creare una funzione anonima, e hanno il compilatore dedurre il tipo restituito:
val x = () => { System.currentTimeMillis }
Proprio per l'amor di tipizzazione statica, è possibile specificare il tipo di ritorno come bene? Penso che sarebbe rendere le cose molto più chiare.
Soluzione
A mio parere, se si sta cercando di rendere le cose più chiare è meglio documentare l'aspettativa sul identificatore x con l'aggiunta di un tipo di annotazione lì piuttosto che il risultato della funzione.
val x: () => Long = () => System.currentTimeMillis
Quindi il compilatore farà in modo che la funzione sul lato destro della strada incontra questa aspettativa.
Altri suggerimenti
val x = () => { System.currentTimeMillis } : Long
Fabian ha dato il modo semplice, ma alcuni altri modi se si come micromanaging zucchero includono:
val x = new (() => Long) {
def apply() = System.currentTimeMillis
}
o
val x = new Function0[Long] {
def apply() = System.currentTimeMillis
}
o anche
val x = new {
def apply(): Long = System.currentTimeMillis
}
poiché nella maggior parte delle situazioni non fa differenza se si scende dalla funzione, ma solo se si ha un applicano.