请在 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 地图,可能受到了以下代码的影响https://github.com/clojure/clojure/blob/7aad2f7dbb3a66019e5cef3726d52d721e9c60df/src/clj/clojure/core.clj#L4336

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

(when-not (integer? c)
(throw (ex-info "Expect number for c."))

这里不需要数据。

0

评论者:bronsa

那么为什么不直接抛出 (Exception. "expect number for c") 呢?我觉得抛出 ex-info 没有数据与直接抛出 Exception 没有增加的价值

0

由 killme2008 发表的评论

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

0

评论者:duke

这将是从 cljc 文件抛出简单异常的好方法,它在 clj 和 cljs 中都有效。

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