5 ms·
Clojure does indeed have -> (thread-first), ->> (thread-last), some->, some->>, cond->, and as->. [0] (->) inserts each form's value between the function name
by intertextuality 8y ago
Clojure does indeed have -> (thread-first), ->> (thread-last), some->, some->>, cond->, and as->. [0]
(->) inserts each form's value between the function name & the first argument in the next form.
(->>) inserts each form's value as the last argument in the next form.
The latter forms are much more niche and I haven't found need for them yet.
[0]: https://clojure.org/guides/threading_macros https://clojure.org/guides/threading_macros
- iterati 8y agoas-> is great for when you have to mix thread-first and thread-last. cond-> is great for building maps where some keys might not be needed: (cond-> {:k1 v1} v2 (assoc :k2 v2) ...) some-> and some->> I don't use as often, but when mixing in some java code that could throw an NPE, these will avoid that and just return nil early (they short-circuit when getting a nil value).
- dustingetz 8y agoYou can next ->> inside ->, took far too many years for me to realize: @(-> ctx :hypercrud.browser/fiddle (reactive/cursor [:fiddle/ident]) (->> (reactive/fmap name))) another (-> [10 11] (conj 12) (as-> xs (map - xs [3 2 1])) (reverse))
- scns 8y agoBucklescript/ReasonML have that too: CLJ:(->)/BS(|.)/RML(->) called Fast Pipe. CLJ:(->>)/BS(|>)/RML(|>) called Pipe. plus some nifty placeholders for other positions: https://reasonml.github.io/docs/en/fast-pipe#pipe-placeholders https://reasonml.github.io/docs/en/fast-pipe#pipe-placeholde...