Передача карты функций макроса

У меня есть макрос, который реализует интерфейс Java, являющийся слушателем. Я определил макрос, чтобы взять карту, содержащую функции, которые я хочу деструктурировать, и использовать для каждого из методов интерфейса. Это макрос: -

(defmacro with-cache-listener-m [component event body]
   (let [{:keys [f-insert f-update]} body]
     `(. ~component addMapListener
     (proxy [AbstractMapListener] []
       (entryInserted [~event] ~f-insert ~event)
       (entryUpdated [~event] ~f-update ~event)))))

Карта тела такая: -

(def m-callbacks {:f-insert callback-insert :f-update callback-update})

Но когда я вызываю (macroexpand '(with-cache-listener-m test-cache e m-callbacks)) , он расширяется до (. test-cache user / addMapListener (clojure.core / proxy [com. tangosol.util.AbstractMapListener] [] (user / entryInserted [e] nil e) (user / entryUpdated [e] nil e)))

Функции обратного вызова равны нулю. Нужно ли мне определять их по-другому или я ошибаюсь?

6
задан JPT 28 April 2011 в 02:53
поделиться