Clojure宏的noob在這裏。我有一個帶有一些可選參數的函數,例如如何將可選的宏參數傳遞給函數
(defn mk-foo [name & opt]
(vec (list* name opt)))
給這個:
user> (mk-foo "bar" 1 2 3)
["bar" 1 2 3]
我想編寫一個宏,其採用相同的可選參數和透明地傳遞他們的mk-foo
調用。到目前爲止,我有這樣的:
(defmacro deffoo [name & opt]
`(def ~name ~(apply mk-foo (str name) opt)))
其中有預期的效果:
user> (macroexpand '(deffoo bar 1 2 3))
(def bar ["bar" 1 2 3])
採用apply
拼合列表opt
感覺笨拙。有沒有一種慣用的方式來做到這一點?我猜[email protected]
是必要的,但我不能得到引用的權利。非常感謝。
我不是特別擅長clojure,但它對我來說看起來很好! – 2012-01-12 22:02:03