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

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

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

  (ex-info "异常信息")

这创建了一个具有空数据的 ExceptionInfo 实例。

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

补丁已附上。

7 个回答

0

由 alexmiller 发表的评论

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

0

由 lgs32a 发表的评论

我一直认为缺少单个参数权限是有意而为之,目的是让用户使用映射参数。你为什么想要抛出不包含数据的 ExceptionInfo?

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 "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 报告)
...