35

私が C の帽子をかぶったとき、おそらく慣用的な Clojure は単純なことをして戻り値をチェックするだけだと思います。

Java の帽子をかぶったとき (しぶしぶ追加しなければなりません)、Clojure は JVM 上で実行されるため、JVM 例外を使用するのが自然な方法であるに違いないと思います。

関数型の帽子をかぶったとき、構成可能な方法でエラーを処理できるある種のモナド構造またはスレッド化マクロが必要であると考えています。

では、Clojure プログラムでエラーを処理する慣用的な方法は何でしょうか?

4

3 に答える 3

20

Clojure のエラー処理は、通常、JVM 例外 (未チェック) 指向です。

Slingshotは、たとえば、スローされた例外値の分解を許可することで、例外をより快適に使用できるようにします。

erlang スタイルのエラー処理を可能にする別の方法については、direを参照してください。このブログ投稿では、悲惨な理由の概要と、Clojure のエラー処理メカニズムと欠点の概要を説明しています。

于 2015-01-02T14:31:42.147 に答える
5

非常に機能的なアプローチについては、cats「ある種のモナド構造」に対応する をご覧ください。

Clojure と ClojureScript の圏論と代数的抽象化。http://funcool.github.io/cats/latest/

ドキュメントからの例:

(require '[cats.core :as m])
(require '[cats.monad.maybe :as maybe])

(m/mappend (maybe/just [1 2 3])
           (maybe/nothing)
           (maybe/just [4 5 6])
           (maybe/nothing))

手動で何もチェックする必要がないことを除けば、nothingこれは といくらか同等であることがわかります。nil

于 2015-09-14T07:41:05.727 に答える