我在# High score (printed in the corner)
c=0
while c>=0:
c=c+1
highscore=myfont6.render("High score:",True, THECOLORS["purple"])
score=myfont6.render(c, True, THECOLORS["purple"])
screen.blit(highscore, (20,20))
screen.blit(score,(40,20))
中定义了一个宏:
func.clj
我希望将其绑定到(ns my-library.func)
(defmacro my-macro [arg]
`(identity ~arg))
中的变量:
core.clj
以便我可以执行以下操作:
(ns my-library.core
(:require [my-library.func :as func])
(def my-macro-core func/my-macro)
但是,我不能这样做,因为宏不会计算为值。以下作品:
(ns script.core
(:require [my-library.core :as mlc]))
(mlc/my-macro-core :boring-macro) ; -> :boring-macro
但这是多余的,所以我想知道是否有更清洁的方法来做到这一点。
答案 0 :(得分:2)
这有点像黑客,但可以做到:
(ns my-library.func)
(defmacro my-macro [arg]
`(identity ~arg))
(ns my-library.core
(:require [my-library.func :as func]))
(def ^:macro my-macro-core @#'func/my-macro)
(ns script.core
(:require [my-library.core :as mlc]))
(mlc/my-macro-core :boring-macro)
诀窍是将新的var定义为别名宏的原始函数值,同时设置:macro
元数据标志,以便编译器识别它并适当地调用它。
答案 1 :(得分:0)
Potemkin的import-vars支持宏:
(require '[potemkin :refer [import-vars]])
(import-vars [my-library.core my-macro])