記錄我有一個記錄(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