我想定义一个函数,将创建一个宏,并在我试图动态提供宏的名称时遇到问题。这里列出了我正在面临的问题的缩小代码:功能,创建宏作为参数提供的宏名称
(defn create-times-macro [n]
(defmacro thatManyTimes [a]
`(* ~n ~a)))
(create-times-macro 2)
(thatManyTimes 3) ;; evals to 6
到目前为止这么好。现在说我要供应宏的名称作为参数:
(defn create-times-macro [macroName n]
(defmacro macroName [a]
`(* ~n ~a)))
(create-times-macro (symbol "multiplyBy") 3)
(multiplyBy 3) ;; fails with unable to resolve symbol multiplyBy
(create-times-macro "multiplyBy" 3)
(multiplyBy 3) ;; same failure
你确定它能在JAR中工作吗?请参阅下面的@Ankur答案。 – Blacksad 2013-02-26 23:04:02
@Blacksad:这将在JAR中工作,因为它是宏创建宏而不是创建宏的函数。 – Ankur 2013-02-27 04:25:52
我明白了。感谢您的领导! – Blacksad 2013-02-27 05:18:26