请在 2024 Clojure状态调查! 中分享您的想法。

欢迎!请参阅关于页面以了解更多关于此页面如何运作的信息。

0
Clojure
我们经常使用 'ex-info' 抛出自定义异常。但 ex-info 至少接受两个参数:一个字符串消息和一个数据映射。
在大多数情况下,但有时我们不需要抛入数据映射的异常。
因此,我认为我们可以向 ex-info 添加一个新的阶数

  (ex-info "异常消息")

这样创建了一个携带空数据的 ExceptionInfo 实例。

我不确定这对其他人是否有用,但它对我们的开发者来说非常有用。

补丁已附上。

7 个答案

0

评论由:alexmiller 提出

为什么 "(. clojure.lang.PersistentArrayMap EMPTY)"?为什么不直接用 {}?

0

评论由:lgs32a 提出

我一直认为缺乏单阶数是有意的设计,以便让用户使用映射参数。为什么你想要抛出不带数据的 ExceptionInfos?

0

评论由:killme2008 提出

@Alex 我忘了为什么在这里使用 EMPTY map,可能是受到了https://github.com/clojure/clojure/blob/7aad2f7dbb3a66019e5cef3726d52d721e9c60df/src/clj/clojure/core.clj#L4336代码的影响

@Leon 例如,当参数错误时抛出异常

(when-not (integer? c)
(throw (ex-info "期望 c 为数字。")))

这里不需要数据。

0

评论人:bronsa

那么为什么不直接抛出(Exception. "expect number for c")呢?我觉得在没有数据的情况下抛出ex-info与直接抛出异常相比于没有带来额外价值

0

评论由:killme2008 提出

确实,这是我们选择使用ex-info抛出异常的一个技术决策。

0

评论人:duke

这是一种从cljc文件中抛出简单异常的好方法,且该方法在clj和cljs中均有效。

0
参考:https://clojure.atlassian.net/browse/CLJ-1496(由killme2008报告)
...