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れる可能性があり、チェーンのさらに下で論理障害が発生する可能性があります。

特定の例には、null ポインター例外から保護する必要がある Java 相互運用機能と一緒に clojure 関数をスレッド化することが含まれます。

于 2013-05-03T15:22:59.507 に答える