Dado un oleoducto ->>
así:elementos condicionales en -/-> >> tuberías
(defn my-fn []
(->> (get-data)
(do-foo)
(do-bar)
(do-baz)))
Deseo hacer que las diferentes etapas condicional.
La primera forma de escribir esto que vino a la mente fue como tal:
(defn my-fn [{:keys [foo bar baz]}]
(->> (get-data)
(if foo (do-foo) identity)
(if bar (do-bar) identity)
(if baz (do-baz) identity))
Sin embargo, como los ->>
macro intenta insertar en la forma if
, esto no sólo se ve desafortunado en términos de rendimiento (que tiene las llamadas a noop identity
), pero en realidad no se puede compilar.
¿Cuál sería una forma apropiada, razonablemente SECA de escribir esto?
¿'get-data' devuelve una secuencia como normalmente se usa con' - >> '? ¿La función 'do-' llama a los efectos secundarios, o toma/devuelve algo? –
Parece poco probable que el if en la llamada con hilos afecte negativamente al rendimiento de forma apreciable –
@AlexTaggart Sí, 'get-data' devuelve una secuencia, potencialmente bastante larga, haciendo de esto un bucle interno. Las funciones 'do- *' son puras, sin efectos secundarios; tal vez nombré mal el código en el ejemplo. –