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
的函数。当我尝试在运行时调用该函数时,它失败了。
我尝试了什么?
- 较低的优化级别:有效
- 经测试,该宏在 repl
上工作正常
- 使用声明,如
(declare fname)
,它在编译时消除了警告,但在运行时失败并出现相同的错误。
我的问题
如何使这种代码在高级优化下工作?
上下文
我正在使用 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
的函数。当我尝试在运行时调用该函数时,它失败了。
我尝试了什么?
- 较低的优化级别:有效
- 经测试,该宏在 repl 上工作正常
- 使用声明,如
(declare fname)
,它在编译时消除了警告,但在运行时失败并出现相同的错误。
我的问题
如何使这种代码在高级优化下工作?