Looking for clojure Keywords? Try Ask4Keywords

clojureWandler


Einführung

Transducer sind komponierbare Komponenten zur Verarbeitung von Daten unabhängig vom Kontext. Damit können sie Sammlungen, Streams, Kanäle usw. ohne Kenntnis ihrer Eingabequellen oder Ausgabesenken verarbeiten.

Die Clojure-Kernbibliothek wurde in 1.7 erweitert, sodass die Sequenzfunktionen wie map, filter, take usw. einen Transducer zurückgeben, wenn er ohne Sequenz aufgerufen wird. Da Transducer Funktionen mit bestimmten Kontrakten sind, können sie mit der normalen comp Funktion zusammengestellt werden.

Bemerkungen

Wandler ermöglichen die Kontrolle der Faulheit während des Verbrauchs. Zum Beispiel into ist bestrebt , wie zu erwarten, aber sequence wird die Sequenz durch den Wandler lazily verbrauchen. Die Faulheitsgarantie ist jedoch anders. Es wird genug von der Quelle verbraucht, um anfangs ein Element zu erzeugen:

(take 0 (sequence (map #(do (prn '-> %) %)) (range 5)))
;; -> 0
;; => ()

Oder entscheiden Sie, ob die Liste leer ist:

(take 0 (sequence (comp (map #(do (prn '-> %) %)) (remove number?)) (range 5)))
;; -> 0
;; -> 1
;; -> 2
;; -> 3
;; -> 4
;; => ()

Was unterscheidet sich vom üblichen Lazy-Sequence-Verhalten:

(take 0 (map #(do (prn '-> %) %) (range 5)))
;; => ()

Wandler Verwandte Beispiele