clojure - 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])
解决方案
推荐阅读
- cron - 当我添加日志选项时,Cron 作业不起作用
- android - 尝试在 Windows 上为 Android 构建 Chromium 时,gclient runhooks 抛出错误
- java - 不兼容的类型:javafx.scene.media.Media 无法转换为 javax.print.attribute.standard.Media
- python - 降维(异构数据)
- node.js - Meteor Mongodb 深度搜索
- vue.js - `nuxt.js` 替代 vue3?
- javascript - 如何使用 TypeScript 在 useRef 挂钩中键入函数
- c# - 在 .net 核心的自定义模型绑定器中验证嵌套的 Json 对象
- angular - 在 Liferay 中调整 Angular 应用程序时出错
- python - 使用双缓冲时的滚动条动画