【发布时间】:2023-03-31 09:36:01
【问题描述】:
我有一些 Clojure 代码试图通过几层 Java 代码进行互操作(在本例中,java.nio.Path 通过java.nio.file.WatchEvent<?>:
(defn unroll-event
[^WatchEvent event]
{ :kind (.kind event)
:context (.context event)
:path (-> event .context .toAbsolutePath .toString)})
在这段代码中,我输入了提示 event,所以我认为它应该能够弄清楚 .context 应该返回什么,因此,能够弄清楚看看.toAbsolutePath 和.toString 做了什么。我认为在这种情况下,由于.context 的定义返回了泛型类型T,我想知道是否可以键入提示对.context 的调用。我尝试将^java.nio.file.Path 分别添加到.context 和^Path 和^String 到.toAbsolutePath 和toString,但我仍然收到警告:
Reflection warning, junkcode/core.clj:28 - reference to field toAbsolutePath can't be resolved.
Reflection warning, junkcode/core.clj:28 - reference to field toString can't be resolved.
在这种情况下我可以做些什么吗?是因为-> 是一个宏,并且其中有特殊的类型提示规则吗?
【问题讨论】:
-
它扩展到什么?使用
clojure.walk/macroexpand-all