背景
我正在使用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)
进行声明,这样可以消除编译时的警告,但在运行时出现相同的错误。
如何使这种代码在高级优化级别下正常工作?