在文件中我定义了这两个宏:
(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中的一个错误还是我错了?
答案 0 :(得分:3)
我相信你在这里看到的问题是由于宏文件的单个元素命名空间。如果你把它改成util.macros并放在类路径上的适当位置来解释它,它就可以了。
可能是一个错误,它在Clojure中没有问题。