Dato un oleodotto ->>
in questo modo:elementi condizionali in ->/- >> oleodotti
(defn my-fn []
(->> (get-data)
(do-foo)
(do-bar)
(do-baz)))
desidero fare le varie fasi condizionale.
Il primo modo di scrivere questo che è venuto in mente era come tale:
(defn my-fn [{:keys [foo bar baz]}]
(->> (get-data)
(if foo (do-foo) identity)
(if bar (do-bar) identity)
(if baz (do-baz) identity))
Tuttavia, poiché i ->>
macro tenta di inserire nel modulo if
, questo sembra un peccato non solo in termini di prestazioni (avendo noop identity
chiamate), ma in realtà non riesce a compilare.
Quale sarebbe un modo appropriato, ragionevolmente ASCIUTTO di scrivere questo?
'get-data' restituisce una sequenza come di solito viene utilizzata con' - >> '? La funzione 'do-' chiama gli effetti collaterali o prende/restituisce qualcosa? –
Sembra improbabile che il se nella chiamata al thread faccia del male alle prestazioni in modo apprezzabile. –
@AlexTaggart Sì, 'get-data' restituisce una sequenza, potenzialmente piuttosto lunga, rendendola effettivamente un ciclo interno. Le funzioni 'do- *' sono pure, senza effetti collaterali; forse ho chiamato male il codice nell'esempio. –