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