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

欢迎!请参阅关于页面,了解更多关于如何使用这个功能的详细信息。

0
编译器

例如

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

(proxy-super flip bitIndex)))

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

我相信仅通过向由 proxy 宏发出的 '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 报告)
...