我有一个将实现作为侦听器的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)))
的回调函数是零。我是否需要对它们进行不同的定义,或者我是否以这种错误的方式去做。
什么是回调插入和回调更新?当你调用m-callback时,它会产生什么? – rplevy 2011-04-28 14:25:13
他们只是打印他们的论点和返回的两个函数。 M-回调是 用户> M-回调 {:F-插入#<用户$ callback_insert用户$ callback_insert @ 1db87736>:F-更新#<用户$ callback_update用户$ callback_update @ 2d3584f9>} – JPT 2011-04-28 14:50:31
如果你绑定m-callback函数的计算结果是该地图,而不是直接映射到地图上? – rplevy 2011-04-28 15:12:10