Мне нужно добавить несколько методов в Clojure defprotocol
, который я пишу для нескольких идентичных компонентов Swing:
(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
и развернуть "на месте"?