在一个文件中,我定义了这两个宏:
(ns macros)
(defmacro foo [a]
`(+ ~a 2))
(defmacro bar [a]
`(* 2 (foo ~a)))
在 clojure 中,两个宏都按预期工作。
在 clojurescript 中,只有宏“foo”有效,“bar”会产生这个错误:
"Error evaluating:" (bar 0) :as "(2 * macros.foo.call(null,0));\n"
org.mozilla.javascript.EcmaError: ReferenceError: "macros" is not defined. (<cljs repl>#4)
at <cljs repl>:4 (anonymous)
at <cljs repl>:4
似乎这里的“foo”宏没有被扩展,而是被解释为一个函数调用。
这是 clojurescript 中的错误还是我做错了什么?