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

欢迎!请参阅 关于 页面了解更多关于这个网站的信息。

+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 主要构建的是一个会被抛出然后在捕获块中被捕获的东东,这种情况下类型注解似乎不会有所帮助?

by
确实如此,这就是我为什么没有提到那个场景。我在想的是(异常。 "一些消息")这种在互操作中传播其类型的说法与(ex-info "一些消息" {})这种没有的说法之间的区别。

我们在我公司的代码库中遇到了几个这样的问题,这并不是致命的,但足以让人感到烦恼,因此在核心库中修改它似乎很值得,而且没有负面影响。
...