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

欢迎!请查看 关于 页面以了解更多关于如何使用本站的信息。

0 记票
Clojure
我们通常使用 'ex-info' 来抛出自定义异常。但 'ex-info' 至少接受两个参数:一个字符串消息和一个数据哈希表(map)。
在大多数情况下,但我们不需要抛出需要数据哈希表(map)的异常。
因此,我认为我们可以在 'ex-info' 中添加一个新的参数:

  (ex-info "异常消息")

这就创建了一个 ExceptionInfo 实例,带有空的数据。

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

补丁已附加。

7 答案

0 记票

评论者:alexmiller

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

0 记票

评论者:lgs32a

我一直认为缺少单参数设计是有意的,以使用户使用地图参数。为什么你想抛出没有数据的 ExceptionInfo?

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 "期待 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 提出)
...