2012-11-15 8 views
6

Mi rendo conto che questa è probabilmente una domanda semplice ma che cosa significa "# ::" raggiungere nella riga di codice sottostante. È una variazione speciale di svantaggi?Cosa significa l'operatore # ::?

def from(n: Int): Stream[Int] = n #:: from(n + 1) 
+1

È necessario eseguire la programmazione funzionale in classe Scala. Sono d'accordo con la risposta di Pere. – cainj

risposta

11

Questo operatore viene utilizzato per costruire streams in contrasto con gli elenchi. Prendere in considerazione lo stesso frammento di codice con semplici contro:

def from(n: Int): List[Int] = n :: from(n + 1) 

l'esecuzione di questo metodo si tradurrà in StackOverflowError. Ma con Stream[Int] coda viene valutata pigramente solo quando è necessario (e vengono già ricordati i valori calcolati).

+0

perché 'def' è usato i valori non sono ricordati;) – sschaef

+1

@sschaef: true,' val stream = from (0) 'dovrebbe essere usato, grazie. –

6

È l'equivalente di :: per Elenchi, ma utilizzato con Streams

Cioè, n diventa il testa di un ruscello dove from(n+1) è la coda

1

Significa creare un oggetto Stream.

È identico a cons per Elenco - invece di :: che crea sempre un elenco, #:: crea sempre un flusso.

0

Un po 'tardi, ma c'è il http://scalex.org/ che è davvero bello bloccare queste cose (google è davvero un casino per tutto ciò che non è alfa-numerico)! In bocca al lupo!