У меня есть макрос, который реализует интерфейс 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)))
Функции обратного вызова равны нулю. Нужно ли мне определять их по-другому или я ошибаюсь?