ClojureScript中的嵌套宏

4
在一个文件中,我定义了这两个宏:
(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还是我做错了什么?


请包含使用它们的文件来源。 - dnolen
我在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) - emareaf
1个回答

4

我认为你在这里看到的问题是由于宏文件采用了单元素命名空间所导致的。如果你将其更改为util.macros并将其放置在类路径的正确位置以解决该问题,则它可以正常工作。

很可能是一个bug,因为在Clojure中没有出现任何问题。


你的意思是在Clojure中定义嵌套宏,而不是ClojureScript吗? - redraiment

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接