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

欢迎!请参阅关于页面以了解该功能的更多信息。

0
编译器

例如

`
user=> (proxy [java.util.BitSet] []
(flip [bitIndex]

(proxy-super flip bitIndex)))

反射警告,NO_SOURCE_PATH:73:5 - 无法解析方法 flip 的调用(目标类未知)。
`

我认为只需向代理宏生成的 'this' 符号添加类型提示元数据即可修复此问题。我尚未尝试此更改,但此宏似乎表明它应该有效

`
(defmacro proxy-super-cls [cls meth & args]
(let [thissym (with-meta (gensym) {:tag cls})]

`(let [~thissym ~'this]
  (proxy-call-with-super (fn [] (. ~thissym ~meth ~@args)) ~thissym ~(name meth))
)))

;;;;;;;;;;;;;;;;;;;;;;
user=> (proxy [java.util.BitSet] []
(flip [bitIndex]

(proxy-super-cls java.util.BitSet flip bitIndex)))

<BitSet$ff19274a {}>

`

1 个回答

0
参考:https://clojure.atlassian.net/browse/CLJ-1433(由glchapman报告)
...