我正在学习 Clojure 宏,并且在尝试在此宏上使用 macroexpand-1 时遇到 NullPointerException:
(def config {:ns 'bulbs.neo4jserver.client,
:root-uri "http://localhost:7474/db/data/"})
(def data {:name "James"})
(defmacro create
[config data]
`(~(ns-resolve (:ns config) 'create-vertex) config data))
(macroexpand-1 '(create config data))
试图编译这个返回:
Unknown location:
error: java.lang.NullPointerException
Compilation failed.
但是评估宏的主体...
`(~(ns-resolve (:ns config) 'create-vertex) config data)
...返回这个...
(#'bulbs.neo4jserver.client/create-vertex bulbs.vertices/config bulbs.vertices/data)
...这就是我想我想要的。
更新:如果我手动替换(:ns config)
,'bulbs.neo4jserver.client
那么错误就会消失——你如何让(:ns config)
游戏变得更好?