Tengo una macro que implementará una interfaz Java que es un oyente. Definí la macro para tomar un mapa que contiene funciones que quiero desestructurar, y uso para cada uno de los métodos de interfaz. Esta es la macro: -Pasando el mapa de funciones a una macro
(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)))))
El mapa corporal es la siguiente: -
(def m-callbacks {:f-insert callback-insert :f-update callback-update})
Pero cuando llamo (macroexpand '(with-cache-listener-m test-cache e m-callbacks))
se expande a (. test-cache user/addMapListener (clojure.core/proxy [com.tangosol.util.AbstractMapListener] [] (user/entryInserted [e] nil e) (user/entryUpdated [e] nil e)))
Las funciones de devolución de llamada son nulas. ¿Tengo que definirlos de manera diferente o estoy haciendo esto de la manera incorrecta?
¿Qué son la inserción de devolución de llamada y la actualización de devolución de llamada? Cuando llamas m-callbacks, ¿qué produce? – rplevy
Son solo dos funciones que imprimen su argumento y regresan. m-callbacks es usuario> m-callbacks {: f-insert #,: f-update # } –
JPT
¿Qué pasa si enlaza m-devoluciones de llamada a una función que evalúa este mapa en lugar de al mapa directamente? – rplevy