2012-11-15 18 views
6

Ich weiß, das ist wahrscheinlich eine einfache Frage, aber was ist "# ::" in der unteren Zeile des Codes erreichen. Ist es eine besondere Varianz der Nachteile?Was bedeutet der Operator # ::?

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

Sie müssen die Functional Programming in Scala Klasse nehmen. Ich stimme Pere zu. – cainj

Antwort

11

Dieser Operator verwendet wird, im Gegensatz zu Listen streams zu konstruieren. Betrachten Sie den gleichen Code-Schnipsel mit einfachen Nachteile:

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

diese Methode läuft in StackOverflowError führen. Aber mit Stream[Int] Schwanz wird nur dann faul ausgewertet, wenn es benötigt wird (und bereits berechnete Werte werden erinnert).

+0

da 'def' verwendet wird, werden die Werte nicht gespeichert;) – sschaef

+1

@sschaef: true,' val stream = von (0) 'müsste verwendet werden, danke. –

6

Es ist das Äquivalent zu :: für Listen, aber mit Streams

, das verwendet wird, wird n der Kopf eines Baches, wo from(n+1) die Schwanz

1

Es bedeutet, ein Stream-Objekt zu erstellen.

Es ist identisch mit cons für List - statt ::, die immer eine Liste erstellt, erstellt #:: immer einen Stream.

0

Etwas spät, aber es gibt http://scalex.org/ das ist wirklich schön, solche Dinge zu sperren (google ist wirklich eine Sauerei auf alles nicht-alphanumerische)! Viel Glück!