用于Clojure的新实例的实际例子 - >宏

时间:2013-05-03 11:37:27

标签: clojure

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->来解决现实问题?

3 个答案:

答案 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

*双关语