Clojurescript 宏和名称修改

Clojurescript macro and name mangling

上下文

我正在使用 Clojurescript,我试图在编译时定义很多函数来包装 Javascript API。我的代码在较低级别的编译器优化下运行良好。是的,当我使用 :optimizations :advanced Clojurescript 编译器标志时,编译器会抛出警告:Use of undeclared Var my.namespace/fname 并且我的代码在运行时无法运行(未找到一些损坏的符号)。

这里是问题的最小示例:

(defmacro create-a-function [l]
  `(defn ~l [o#] (inc o#)))

(create-a-function fname)

;; Below inside another function
(defn fname-clone [k]
  (fname k))

我在编译时使用宏 create-a-function 决定一个名为 fname 的函数。当我尝试在运行时调用该函数时,它失败了。

我尝试了什么?

我的问题

如何使这种代码在高级优化下工作?

我在 this repo 中复制了您的代码并且它有效。

请注意,您必须将宏放在 .clj 文件中。

如果您想在 ClojureScript 中使用 .cljc 文件中的宏,请使用 macrovich