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 投票
by

看起来ex-info主要构建了一个被抛出并在catch块中捕获的东西,这种类型提示不起作用?

by
确实如此,这就是为什么我没有提到那个案例。我在想,说(Exception. "some message")将类型传播用于互操作,与(ex-info "some message" {})不这样做之间的脱节。

在我们公司的代码库中,我们遇到了这个问题,它并不是一个无法解决的问题,但它足以令人烦恼,因此似乎值得在核心中做出改变而没有任何负面影响。
...