3

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

(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 中的错误还是我做错了什么?

4

1 回答 1

3

我相信您在这里看到的问题是由于宏文件的单个元素命名空间。如果您将其更改为 util.macros 并将其放在类路径中的适当位置以解决此问题,则它可以工作。

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

于 2011-10-24T16:04:08.500 回答