J'utilise « proxy » pour étendre différentes classes Swing dans une application GUI Clojure, généralement avec le code qui ressemble à:Ajout de champs à une classe approximé dans Clojure
(def ^JPanel mypanel
(proxy [JPanel] []
(paintComponent [#^Graphics g]
(.drawImage g background-image 0 0 nil))))
Cela fonctionne bien, mais je ne peux Ne comprenez pas comment ajouter des champs supplémentaires à la classe nouvellement étendue, par exemple en faisant de l'image d'arrière-plan un champ qui pourrait être mis à jour par la suite. Ce serait une pratique assez facile et courante en Java.
Existe-t-il un bon moyen de le faire dans Clojure? Ou y a-t-il une autre méthode préférée pour obtenir le même effet?
idée très intéressante - voulez-vous dire avec defn plutôt que def? – mikera
doto semble approprié ici: (doto g (.drawImage ...) (...)) – Greg
hmmmm ... quelqu'un sait comment Clojure met en œuvre cela en interne? Est-ce qu'il ajoute réellement un champ à la classe mandatée? – mikera