我在學習的Clojure宏的過程中,我越來越想在這個宏中使用macroexpand-1,當一個NullPointerException異常:爲什麼在這個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)
發揮不錯?
啊。謝謝蒂姆。 – espeed