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