【发布时间】:2011-10-24 11:54:58
【问题描述】:
在一个文件中我定义了这两个宏:
(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 中的错误还是我有什么问题?
【问题讨论】:
-
请附上使用它们的文件来源。
-
我在repl中使用了它们。 clojure: (use 'macros)\n(foo 0)\n(bar 0) clojurescript: (ns test (:use-macros [macros :only [foo bar]]))\n(foo 0)\n(bar 0)
标签: clojure clojurescript