【发布时间】:2011-06-18 20:03:51
【问题描述】:
我需要向我正在为几个相同的 Swing 组件编写的 Clojure defprotocol 添加几个方法:
(defprotocol view-methods
(ok-button-add-action-listener [this listener])
(ok-button-set-enabled [this enabled])
(ok-button-set-selected [this selected])
(cancel-button-add-action-listener [this listener])
(cancel-button-set-enabled [this enabled])
(cancel-button-set-selected [this selected])
(other-button-add-action-listener [this listener])
(other-button-set-enabled [this enabled])
(other-button-set-selected [this selected]))
有什么方法可以编写一个宏来返回所有三个方法签名(xxx-button-add-action-listener、xxx-button-set-enabled、xxx-button-set-selected)?
(defprotocol view-methods
(add-methods ok)
(add-methods cancel)
(add-methods other))
此宏需要在每次调用时将三个项目添加到不断增长的defprotocol。
宏能否返回`~@a-list 并“就地”展开?
【问题讨论】: