当一个应用宏多次另一个宏,裸符号不被插入到当前上下文中:宏遍历未定义的符号
(defmacro ty [type]
`(deftype ~type []))
(defmacro empties [& args]
(doseq [arg args]
`(ty ~arg))
)
(empties Base Person Animal)
;equivalent to:
;(ty Base)
;(ty Person)
;(ty Animal)
(derive ::Person ::Base)
(derive ::Animal ::Base)
(ty Me)
(prn ::Me)
(prn Me)
(empties Empty)
(prn ::Empty)
(prn Empty)
最后一行给出:“无法解析符号:空在这上下文“,即使在使用直接宏观时,它也可以工作。任何方式来解决这个问题?如果可能的话没有评估它会好得多。
@ daniel-ribeiro适合我。 'user =>(清空)| user.Empty | user =>(prn Empty)| user.Empty'。 – kotarak
谢谢@kotarak。我在REPL上使用过它,并且它工作正常。 Intellij的LaClojure搞砸了一些东西,它不起作用。奇怪的。我很抱歉没有尝试过REPL。 –
注意:这个答案比Svante的正确和简单。然而,他的回答解释了为什么这一个是正确的。希望能够选择两者。 –