Что вызывает эту ошибку?
(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))
Что вызывает эту ошибку?
(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))
htrhrthtrh
получает квалификацию пространства имен с помощью синтаксической кавычки в выводе, поэтому результат выглядит так
(defn some.namespace/htrhrthtrh [] (js/alert "hi"))
что неверно, как объяснено в сообщении об исключении.
Предположительно, вы захотите использовать ~name
вместо htrhrthtrh
, чтобы включить в вывод аргумент name для defn+
; это или что-то подобное решит проблему. Чтобы запрограммировать это точное имя, вам нужно сказать ~'htrhrthtrh
.