tutorial online framework example clojure

online - Diferencia entre las macros de flecha y flecha doble en Clojure



clojure web framework (1)

Los documentos A. Webb están vinculados para explicar el "qué", pero no hacen un buen trabajo del "por qué".

Como regla general, cuando una función funciona en un sujeto singular, ese sujeto es el primer argumento (por ejemplo, conj , assoc ). Cuando una función funciona en un tema de secuencia, ese sujeto es el último argumento (por ejemplo, map , filter ).

Entonces, -> y ->> están documentados como enhebrar el primer y último argumento respectivamente, pero también es útil pensar que se aplican a argumentos singulares o secuenciales, respectivamente.

Por ejemplo, podemos considerar un vector como un objeto singular:

(-> [1 2 3] (conj 4) ; (conj [1 2 3] 4) (conj 5) ; (conj [1 2 3 4] 5) (assoc 0 0)) ; (assoc [1 2 3 4 5] 0 0) => [0 2 3 4 5]

O podemos considerarlo como una secuencia:

(->> [1 2 3] (map inc) ; (map inc [1 2 3]) (map inc) ; (map inc (2 3 4)) (concat [0 2])) ; (concat [0 2] (3 4 5)) => (0 2 3 4 5)

¿Cuál es la diferencia entre las macros -> y ->> en Clojure?