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)
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)
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).
da 'def' verwendet wird, werden die Werte nicht gespeichert;) – sschaef
@sschaef: true,' val stream = von (0) 'müsste verwendet werden, danke. –
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
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.
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!
Sie müssen die Functional Programming in Scala Klasse nehmen. Ich stimme Pere zu. – cainj