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

欢迎!有关如何使用本站的信息,请参阅关于页面。

0
错误

clojure.lang.ExceptionInfo 的两个参数构造器会链接到三个参数版本,传递null作为原因。三个参数的构造器随后调用super并使用null原因,在此之上是注释“null原因等同于没有传递原因”。

这实际上并不正确,因为在这里传递null意味着原因已经被初始化,不管值是什么。因此,您不能在稍后调用ex-info异常的.initCause。在我的情况下,'原因'在抛出时是未知的:异常在上层被捕获,添加原因,然后再次抛出。

总的来说,这个表达式总是会抛出异常:(-> (ex-info "ex" {}) (.initCause (Exception. "cause")))。

简单的解决方案是调用2参数super,并在原因非null时调用.initCause。

谢谢

Matt.

1 个答案

0
...