记录我有一个记录(defrecord Rec [id])
创建具有宏观
我与它的工作就像
(def my (Rec. 2))
(println (:id my))
现在我想用宏替换记录画质。所以,我可以写只是
(r 2)
(println (:id my))
我写了宏观
(defmacro r [id]
(list 'def 'my (symbol "(") 'Rec. id (symbol ")")))
我macroexpand
(macroexpand-1 '(r 2)) => (def my (Rec. 2))
检查的话,但我得到RuntimeException: Too many arguments to def
上(r 2)
。
“现在我想用宏替换记录def”。为什么? – 2012-08-01 22:35:16
@Alex Taggart,因为我想创建一个类似于DSL的东西。这个问题的例子也被简化了。 – 2012-08-02 07:27:48