我在clojurescript中工作,其中ns-interns
是一个宏。
我试图编写一个获取命名空间内部绑定信息的宏,但我无法在编译时操作这些绑定。
(defmacro my-macro [namespace]
(let [mappings (ns-interns namespace)]
; do stuff
))
(my-macro 'mylib.hi)
问题是上面的方法失败了,因为ns-interns
宏认为它正在处理符号namespace
,而不是我传递给my-macro
的命名空间。
我可以尝试
[mappings `(ns-interns ~namespace)]
,但这样我就不能在编译时展开宏到一个我可以用来生成代码的映射 -- 我唯一能做的就是“打印”在生成的代码中。我尝试使用 macroexpand
和 macroexpand-all
,但它们对我不起作用 -- 我无法用它们来获取 ns-interns
的结果以在我的宏中使用。
然而,宏是可以展开的,因为以下链接如果我用固定的命名空间符号硬编码的话它会工作。问题在于,我想要将外部宏的参数传递给内部宏。解决这个问题的正确方法是什么,在Clojurescript中,我想要在编译时获取和操作命名空间的变量?
(defmacro my-macro [namespace]
(let [mappings (ns-interns 'mylib.hi)]
; do stuff
)
)