首页 > 解决方案 > clojure 宏中的问题为地图数组中的每个元素创建符号

问题描述

基本上我是宏的新手,并尝试在宏中从地图数组创建符号并出现错误:
CompilerException java.lang.IllegalArgumentException:不知道如何从:clojure.lang.Symbol 创建 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])

标签: clojure

解决方案


推荐阅读