请分享您的想法,参与2024 Clojure 应用状态调查!

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

+1 投票
Clojure

问题
我尝试在 GraalVM 中使用 {{clojure.stracktrace(print-stack-trace)}},但是这样不可行,因为需要反射来找到 {{getMessage}} 方法。

建议的解决方案
可以通过添加类型提示来解决此问题。

以下是对由
`(set! warn-on-reflection true)`
:

反射警告,/tmp/stacktrace.clj:24:18 - 无法解析字段 getCause。反射警告,/tmp/stacktrace.clj:32:15 - 无法解析字段 getClassName。反射警告,/tmp/stacktrace.clj:33:9 - 无法解析字段 getMethodName。反射警告,/tmp/stacktrace.clj:38:26 - 无法解析字段 getFileName。反射警告,/tmp/stacktrace.clj:38:47 - 无法解析字段 getLineNumber。反射警告,/tmp/stacktrace.clj:45:42 - 无法解析字段 getMessage。反射警告,/tmp/stacktrace.clj:24:18 - 无法解析字段 getCause。

补丁 CLJ-2502-2.patch 去除不需要的空白更改并提高 {{root-cause}} 的类型提示。

由谁筛选: Alex Miller

6 个答案

0 投票

评论者:borkdude

我很乐意自己实现修复,在审查此问题后。

0 投票

评论者:alexmiller

去做吧!在补丁中,您可以将 warn-on-reflect 设置放在代码的最上面。

0 投票

评论者:borkdude

已使用GraalVM测试,现在它工作了。

0 投票

评论者:alexmiller

那里似乎有一些额外的缩进更改 - 如果你能尽量减少它们,那就太感谢了。对于根本原因,我更喜欢尽可能高的类型提示(在参数中)。你能更新这些吗?

0 投票

评论者:borkdude

已完成。

0 投票
参考:[https://clojure.atlassian.net/browse/CLJ-2502](https://clojure.atlassian.net/browse/CLJ-2502)(由borkdude报告)
...