我正在使用“proxy”在Clojure GUI应用程序中扩展各种Swing类,通常代码类似于:
(def ^JPanel mypanel
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(.drawImage g background-image 0 0 nil))))
这很好但我无法弄清楚如何向新扩展的类添加其他字段,例如使background-image成为可以随后更新的字段。这在Java中非常容易和常见。
在Clojure中有一个很好的方法吗?还是有另一种方法可以达到同样的效果吗?
答案 0 :(得分:9)
您可以使用以下内容:
(defn ^JPanel mypanel [state]
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(do
(comment do something with state)
(.drawImage g background-image 0 0 nil)))))
或使用任何其他外部函数/ ref。