2024年Clojure调查中分享您的想法!

欢迎!请访问关于页面,了解有关如何使用本站的一些更多信息。

0
ClojureScript

我有一个宏,它在体中调用macroexpand以遍历宏展开的代码并生成输出。

从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文件中的(:require-macros […])ns声明中使用。

一个好的例子是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中定义。

...