ClojureScript宏错误:“无法定义限定名称”

时间:2013-08-23 18:41:11

标签: clojure clojurescript

导致此错误的原因是什么?

(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))

1 个答案:

答案 0 :(得分:7)

htrhrthtrh在输出中通过syntax-quote获得名称空间限定,因此结果类似于

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

这是不正确的,如异常消息中所述。

据推测,您可能希望使用~name代替htrhrthtrh在输出中包含名称参数defn+;这个,或类似的任何东西,将解决问题。要硬连接这个确切的名称,您必须说~'htrhrthtrh