2013-05-03 73 views
13

Clojure的1.5增加新的線程的宏,其中包括:使用用於Clojure的新some-的實際例子>宏

  • 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->來解決現實世界的問題?

回答

14

some->可用於「自動後衛」螺紋一系列加工步驟,其中在鏈(尤其是在中間)某些部分可能會返回nil幾個這會導致進一步下降的邏輯失敗。

特定的例子可能包括將clojure函數與java interop一起使用,在這裏你需要防範空指針異常。

+1

+1提Java的互操作。這似乎是'some->'的完美用法 – joelittlejohn 2013-05-03 19:30:16

6

一個GitHub的代碼搜索變成了相當examples

+0

我喜歡你的想法:) – joelittlejohn 2013-05-03 19:28:37

1

clojuredocs.org page on some->有一些some->例子*:

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

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

*雙關語意