2

Slingshot のtry+andを使用するcatchと、マップの内容に一致するセレクターを簡単に作成できます。

(defn dosomething (throw+ {:some :data}))
(try+ (dosomething)
    (catch [:some :data] ;; recover))

ただし、 を使用したい場合、そのキャッチ セレクターはのデータex-infoと一致しません。ExceptionInfo

(defn dosomething (throw (ex-info "A message" {:some :data})))

明らかにExceptionInfo、データに一致するカスタム述語をキャッチしたり、記述したりできます。Slingshot または について何かが欠けているのではないかex-infoと思っていました。

4

1 に答える 1

0

ExceptionInfo をスローする理由がよくわかりません。私の理解では、throw+ を使用して通常どおりスローできる任意のデータのキャリアにすぎません。

(throw+ {:some :data :msg "A message"})

または、throw+ を使用したくないということがポイントである場合、それをキャッチするための完全に簡単な方法はないと思います。あなたは次のようなことをしなければならないでしょう

(catch (-> % ex-data :some (= :data)) myerr (foo myerr))

try+ を使用したいが throw+ を使用したくない場合の使用例がわかりません。

于 2012-11-27T23:01:14.053 に答える