【问题标题】:nested macros in clojurescriptclojurescript 中的嵌套宏
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 您的意思是在 Clojure 而不是 ClojureScript 中定义嵌套宏?
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多