我正在 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
)
)