clojurescript中的嵌套宏

时间:2011-10-24 11:54:58

标签: clojure clojurescript

在文件中我定义了这两个宏:

(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中的一个错误还是我错了?

1 个答案:

答案 0 :(得分:3)

我相信你在这里看到的问题是由于宏文件的单个元素命名空间。如果你把它改成util.macros并放在类路径上的适当位置来解释它,它就可以了。

可能是一个错误,它在Clojure中没有问题。