3 ms·
There is a neat macro I've been using to solve problems like the nested if-lets in the post: https://github.com/Engelberg/better-cond https://github.com/Engelb
by ryuuseijin 10y ago
There is a neat macro I've been using to solve problems like the nested if-lets in the post:
https://github.com/Engelberg/better-cond https://github.com/Engelberg/better-cond
(b/cond
:let [x (foo)]
(not x) (do (log "foo failed") false)
:let [y (bar x)]
(not y) (do (log "bar failed") false)
:let [z (baz x y)]
(not z) (do (log "baz failed") false)
:else (do (qux x y z) (log "it worked") true))
- whalesalad 10y agoHave you looked into the `some->` threading macro? https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/some-> https://clojure.github.io/clojure/clojure.core-api.html#cloj...
- ryuuseijin 10y agoYes, it gives you short circuiting on nil values. The post mentions `some->` and laments its inability to handle varying function signatures. You can combine `some->` with other threading macros to make it achieve the desired effect, and you can also achieve the desired effect with `if-let` as the post demonstrates, but I believe the b/cond approach to be more readable than both.