Clojure宏编写全解析
1. 宏基础
在定义宏时,可以像使用函数和 let 绑定一样使用参数解构,还能编写多参数和递归宏。大多数情况下,宏会返回列表,可以使用列表函数或语法引用(syntax quoting)来构建要返回的列表。语法引用通常能让代码更清晰简洁,因为它允许创建一个易于直观解析的数据结构模板。在构建列表时,明确符号与其求值结果之间的区别很重要。若希望宏返回多个供Clojure求值的表单,要确保将它们包装在 do 中。
2. 宏的重构与反引用拼接
下面是一个 code-critic 宏的例子,最初的代码存在重复问题:
(defn criticize-code
[criticism code]
`(println ~criticism (quote ~code)))
(defmacro code-critic
[bad good]
`(do ~(criticize-code "Cursed bacteria of Liberia, this is bad code:" bad)
~(criticize-code "Sweet sacred boa of Western and Eastern Samoa, this is good code:" good)))
为了优化代码,使用 map 函数来减少重复:
(de
Clojure宏编写全解析与应用
超级会员免费看
订阅专栏 解锁全文
576

被折叠的 条评论
为什么被折叠?



