2024年的Clojure调查问卷!中分享你的想法。

欢迎!请查阅关于页面以获取更多关于这个网站如何工作的信息。

+2
元数据

有时我需要与 ExceptionInfo 的基本异常信息交互(例如 .setStackTrace)。核心函数 ex-info 也没有类型提示,因此为了避免反射警告,当我使用调用结果时必须指定 ^ExceptionInfo

(let [old-ex (Exception. "asdf")
      new-ex (ex-info "example" {})]
  (doto  ^ExceptionInfo new-ex (.setStackTrace (.getStackTrace old-ex))))

将类型提示添加到 ex-info 将干净利落地解决所有此类用途的问题(包括 Clojure 核心库中、ex-data 等的使用)。

如果有人感兴趣,我可以制作一个补丁。

2 个答案

+1

被选择
 
最佳答案

为跟踪此问题创建的 Jira 问题https://clojure.atlassian.net/browse/CLJ-2815已经创建。

谢谢!也谢谢你的补丁!
0

看起来ex-info主要构建了一个被抛出并在catch块中被捕获的东西,这似乎并没有帮助对类型提示有帮助?

这是真的,这才是为什么我没有提到那个案例。我在想,说 (Exception. “some message”) 传播其类型以进行互操作和说 (ex-info “some message” {}) 不传播类型之间的区别。

在我的公司的代码库中有几个地方遇到过这个问题,并不是问题所在,但它足够烦人,以至于我觉得在核心中改变它是值得的,而且没有负面作用。
...