14

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->解决过现实世界的问题?

4

3 回答 3

14

some->可用于“自动保护”一系列线程化处理步骤,其中链中的某些部分(尤其是中间)可能会返回nil,这将导致进一步的逻辑故障。

特定示例可能包括线程化 clojure 函数以及 java interop,您需要在其中防止空指针异常。

于 2013-05-03T15:22:59.507 回答
6

GitHub 代码搜索出现了很多示例

于 2013-05-03T15:01:37.387 回答
2

some-> 上的clojuredocs.org 页面有一些some->示例*:

(-> {:a 1} :b inc)
;; NullPointerException   clojure.lang.Numbers.ops (Numbers.java:942)

(some-> {:a 1} :b inc)
;; nil

* 双关语

于 2015-01-03T05:21:37.013 回答