在一个文件中,我定义了这两个宏:
在Clojure中,这两个宏都按预期工作。
在ClojureScript中,只有宏 "foo" 能够正常工作,“bar”会产生以下错误:
(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的一个bug还是我做错了什么?