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. "某种消息")这会传递类型以实现互操作性,而(ex-info "某种消息" {})则不会。

在我的公司代码库的几个地方遇到了这个问题,这不是破坏性的,但足够令人烦恼,所以觉得值得在核心上进行更改,不会有任何负面影响。
...