вложенные макросы в clojurescript

В файле я определяю эти 2 макроса:

(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 или я что-то не так сделал?


person emareaf    schedule 24.10.2011    source источник
comment
Пожалуйста, укажите источник файла, в котором они находятся.   -  person dnolen    schedule 24.10.2011
comment
Я использовал их в repl. clojure: (использовать макросы)\n(foo 0)\n(bar 0) clojurescript: (ns test (:use-macros [macros :only [foo bar]]))\n(foo 0)\n(bar 0)   -  person emareaf    schedule 24.10.2011


Ответы (1)


Я считаю, что проблема, которую вы здесь видите, связана с пространством имен одного элемента для файла макросов. Если вы измените его на util.macros и поместите в нужное место в пути к классам, чтобы учесть это, это сработает.

Вероятно, ошибка, поскольку она работает без проблем в Clojure.

person dnolen    schedule 24.10.2011
comment
Вы имеете в виду определение вложенных макросов в Clojure, а не в ClojureScript? - person redraiment; 25.07.2016