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