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.

È stato utile?

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.

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