5
votes

What's causing this error?

(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

1 Answers

7
votes

htrhrthtrh gets namespace-qualified by syntax-quote in the output, so the result looks like

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

which is incorrect, as explained in the exception message.

Presumably you'll want to use ~name in place of htrhrthtrh to include the name argument to defn+ in the output; this, or anything along similar lines, would fix the problem. To hard-wire this exact name you'd have to say ~'htrhrthtrh.