我定義一個宏結合從字符串衍生的字符串這樣的符號:Clojure中
lein repl
... Clojure 1.8.0 ...
user=> (defmacro foo [s] `(def ~(symbol s) ~s))
#'user/foo
它工作時在頂層援引爲預期:
user=> (foo "asdf")
#'user/asdf
user=> asdf
"asdf"
但是,當我嘗試映射,超過順序調用宏功能,宏綁定功能參數符號,而不是一個我想:
user=> (map (fn [x] (foo x)) ["qwer"])
(#'user/x)
user=> x
"qwer"
user=> qwer
CompilerException ... Unable to resolve symbol: qwer ...
以下替代結合由Clojure的創建臨時符號:
user=> (map #(foo %) ["qwer"])
(#'user/p1__1253#)
還裹着doall
當一些我StackOverflow上研究了現有的答案的建議是行不通的。
我如何定義一個符號結合宏觀,我可以在字符串的集合(在一個函數或其他方式)的地圖?