2

如果我使用 Slingshot 的try+and catch,很容易编写一个选择器来匹配地图的内容:

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

但是,如果我想使用ex-info,则 catch 选择器与 的数据不匹配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 回答