Clojure 1.5添加了新的线程宏,包括:
some->
some->>
更改日志有这个人为的例子来说明some->
如何运作:
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
与其他程序员聊天,我们发现很难想到some->
的一个好的,实用的例子。您何时使用some->
来解决现实问题?
答案 0 :(得分:14)
some->
可用于“自动保护”一系列螺纹处理步骤,其中链中的某些部分(尤其是中间部分)可能返回nil
,这会导致逻辑故障进一步降低连锁,链条。
特殊示例可能包括将clojure函数与java interop一起线程化,您需要防止空指针异常。
答案 1 :(得分:6)
GitHub代码搜索出现了不少examples
答案 2 :(得分:2)
clojuredocs.org page on some->有一些some->
示例*:
(-> {:a 1} :b inc)
;; NullPointerException clojure.lang.Numbers.ops (Numbers.java:942)
(some-> {:a 1} :b inc)
;; nil
*双关语