2013-05-03 7 views
13

の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->を使用したことはありますか?

答えて

14

some->をオン(特に中央)鎖内のいくつかの部分がnil返す可能性がある処理工程の「自動ガード」スレッド直列に使用することができますチェーンをさらに下って論理故障が発生する。

特定の例には、nullポインタ例外を防ぐ必要があるjava interopと一緒にclojure関数をスレッド化することが含まれます。

+1

+1が好き。これは、 'some->'のための完全な使い方のようです – joelittlejohn

6

GitHubのコードの検索が

examplesかなりの数
+0

を意図した私は、Javaの相互運用機能に言及するためにあなたの思考:) – joelittlejohn

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 

*しゃれが

関連する問題