Practical examples of use for Clojure's some-> macro

clojure

Solution

`some->` can be used to "auto-guard" a threaded series of processing steps where some part in the chain (especially in the middle) might return `nil` which would cause a logic failure further down the chain.

Particular examples could include threading clojure functions together with java interop where you would need to guard against null pointer exceptions.

Problem

Clojure 1.5 adds new threading macros, including: - `some->` - `some->>` The changelog has this contrived example to illustrate how `some->` works: ``` user=> (defn die [x] (assert false)) #'user/die user=> (-> 1 inc range next next next die) AssertionError Assert failed: false user/die (NO_SOURCE_FILE:65) user=> (some-> 1 inc range next next next die) nil ``` Chatting with other programmers, we found it difficult to think of a good, practical example for `some->`. When have you used `some->` to solve a real-world problem?

Original source