Ошибка макроса ClojureScript: невозможно определить имя с указанием ns

Что вызывает эту ошибку?

(defmacro defn+
  [name & stmts]
  `(defn htrhrthtrh ~@stmts)) 

(defn+ init
  []
  (js/alert "hi"))

--

java.lang.AssertionError: Assert failed: Can't def ns-qualified name
(not (namespace sym))

person Matthew H    schedule 23.08.2013    source источник


Ответы (1)


htrhrthtrh получает квалификацию пространства имен с помощью синтаксической кавычки в выводе, поэтому результат выглядит так

(defn some.namespace/htrhrthtrh [] (js/alert "hi"))

что неверно, как объяснено в сообщении об исключении.

Предположительно, вы захотите использовать ~name вместо htrhrthtrh, чтобы включить в вывод аргумент name для defn+; это или что-то подобное решит проблему. Чтобы запрограммировать это точное имя, вам нужно сказать ~'htrhrthtrh.

person Michał Marczyk    schedule 23.08.2013