请在2024 Clojure状态调查!中分享您的看法。

欢迎!请访问关于页面以获取有关此功能的更多信息。

0
ClojureScript

我有一个宏,在其内部体中调用宏展开,以便可以遍历宏展开代码以生成其输出。

当从Clojure调用时,它工作得非常好,但当从ClojureScript调用时,宏展开调用的唯一返回是其输入,而不执行任何宏展开。

示例

(defmacro m [form]
  (let [form' (macroexpand form)]
   ;; do something with form'
))

这看起来像是一个bug,您认为呢?有什么解决方案吗?

以下是一个重现问题的仓库:https://github.com/jpmonettas/clojurescript-macro-issue

谢谢!
Juan

1 答案

+1

Clojurescript不编译宏。您可以将宏放在Clojure源文件中,并在Clojurescript文件的ns声明中使用(:require-macros […])

一个很好的例子是在Reagent中,宏在https://github.com/reagent-project/reagent/blob/master/src/reagent/core.cljs#L2导入,并在https://github.com/reagent-project/reagent/blob/master/src/reagent/core.clj#L4定义。

...