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

欢迎!请参阅关于页面,了解更多关于如何使用本网站的信息。

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

  (ex-info "异常消息")

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

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

补丁已附带。

7 答案

0

评论者:alexmiller

为什么是"(. clojure.lang.PersistentArrayMap EMPTY)"?为什么不是"{}"?

0

评论者:lgs32a

我一直认为缺少单一参数是有意设计,以使用户使用映射参数。你为什么想抛出没有数据的数据异常呢?

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和直接抛出异常相比,并没有增加太多价值。

0

评论者:killme2008

确实,我们只是做出了一个纯技术层面的决定,选择使用ex-info来抛出异常。

0

评论人:duke

这是从cljc文件中抛出简单异常的好方法,它可以在clj和cljs中都正常工作。

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