Добавление полей в прокси-класс в Clojure - PullRequest
9 голосов
/ 17 июня 2010

Я использую «прокси» для расширения различных классов Swing в приложении Clojure GUI, обычно с кодом, который выглядит примерно так:

(def ^JPanel mypanel 
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (.drawImage g background-image 0 0 nil))))

Это работает хорошо, но я не могу понять, какдобавьте дополнительные поля в новый расширенный класс, например, сделав фоновое изображение полем, которое впоследствии может быть обновлено.Это будет довольно простой и распространенной практикой в ​​Java.

Есть ли хороший способ сделать это в Clojure?Или есть другой предпочтительный метод для достижения того же эффекта?

1 Ответ

9 голосов
/ 17 июня 2010

Вы можете использовать что-то вроде этого:

(defn ^JPanel mypanel [state]
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (do
        (comment do something with state)
        (.drawImage g background-image 0 0 nil)))))

или использовать любую другую внешнюю функцию / ref.

...