基本上我是宏的新手,正在尝试通过宏从地图数组中创建符号并得到错误:
CompilerException java.lang.IllegalArgumentException:不知道如何从clojure.lang创建ISeq。符号
但是能够使其适用于地图而不是地图数组并调用
(gensym-of-map〜args〜ctx)
请帮助解决gensym-of-amap宏
(defmacro gensym-of-amap[args ctx]
`(let [~@(mapcat (fn [[k v]] [k `~v]) ctx)]
(prn "access ~args via ~'aa ~'bb and ctx syms ~'a"))
)
(defmacro gensyms[ctx args]
`(let [] (fn ~args
(for [~'c '~ctx]
(gensym-of-amap ~args ~'c) ;run foreach ctx
))))
(def test-macro (gensyms [{a 1} {a 2}] [aa bb]))
(apply test-macro [1 2])