5

是什么导致了这个错误?

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

1 回答 1

7

htrhrthtrh在输出中通过语法引用获得命名空间限定,所以结果看起来像

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

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

大概你会想要使用~name代替在输出htrhrthtrh中包含 name 参数defn+;这个,或者任何类似的东西,都可以解决这个问题。要硬连线这个确切的名称,您必须说~'htrhrthtrh.

于 2013-08-23T19:28:36.717 回答