Aggiunta di campi a una classe Proxied in Clojure
Domanda
sto usando "proxy" per estendere diverse classi Swing in un'applicazione Clojure GUI, in genere con il codice che sembra qualcosa di simile:
(def ^JPanel mypanel
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(.drawImage g background-image 0 0 nil))))
Questo funziona bene, ma io non riesco a capire come aggiungere campi aggiuntivi per la classe appena esteso, ad esempio rendendo l'immagine di sfondo di un campo che potrebbe essere successivamente aggiornato. Questo sarebbe abbastanza facile e pratica comune in Java.
C'è un buon modo per fare questo in Clojure? O c'è un altro metodo preferito per ottenere lo stesso effetto?
Soluzione
Si può usare qualcosa di simile a questo:
(defn ^JPanel mypanel [state]
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(do
(comment do something with state)
(.drawImage g background-image 0 0 nil)))))
o utilizzare qualsiasi altra funzione esterna / rif.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow