从clojure宏返回多个值

Ral*_*lph 8 macros clojure

我需要为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]))
Run Code Online (Sandbox Code Playgroud)

有没有办法,我可以写一个宏,返回所有三个方法签名(任何方式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))
Run Code Online (Sandbox Code Playgroud)

这个宏需要在defprotocol每次调用时增加三个项目.

一个宏可以返回`~@a-list并扩展"到位"吗?

Lau*_*tit 10

是的,你只需要在宏中展开你的宏(do ...),Clojure编译器会将子程序do作为一系列顶级表单进行处理.