加餐|宏编程(上):用最“笨”的方式撰写宏
陈天
该思维导图由 AI 生成,仅供参考
你好,我是陈天。
学过上一讲,相信你现在应该理解为什么在课程的第 6 讲我们说,宏的本质其实很简单,抛开 quote/unquote,宏编程主要的工作就是把一棵语法树转换成另一颗语法树,而这个转换的过程深入下去,不过就是数据结构到数据结构的转换。
那在 Rust 里宏到底是如何做到转换的呢?
接下来,我们就一起尝试构建声明宏和过程宏。希望你能从自己撰写的过程中,感受构建宏的过程中做数据转换的思路和方法,掌握了这个方法,你可以应对几乎所有和宏编程有关的问题。
如何构建声明宏
首先看声明宏是如何创建的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Rust宏编程是一项强大的技术,本文深入介绍了它的基本原理和使用方法。文章详细讨论了声明宏和过程宏两种类型,以及如何利用模式匹配实现参数的捕获和展开,从而简化重复代码的处理。特别强调了过程宏中最有意义的一类——派生宏,并通过示例代码展示了如何构建过程宏,以及TokenStream和TokenTree的基本结构。此外,文章还提供了一个思考题,引导读者通过宏来简化从第三方schema生成Rust数据结构的操作。总的来说,本文内容深入浅出,对于想要了解Rust宏编程的读者来说,是一份很好的参考资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《陈天 · Rust 编程第一课》,新⼈⾸单¥68
《陈天 · Rust 编程第一课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- pedro值!2022-01-253
- Geek_4df987如果传入用冒号分隔的两个表达式 错别字:应该是用 “分号” 分隔2023-09-28归属地:北京
- Geek_4df987另一颗语法树 错别字2023-09-28归属地:北京
- 孔祥旭您好, 我运行程序之后, query!(xxxxx)并没有输出任何信息, 这是怎么一回事, 我在宏的上面和下面定义了println("1"), 均有输出2023-06-12归属地:广东2
- 记事本陈老师,无法识别use proc_macro::{TokenStream} unresolved import 克隆你仓库的代码都一样2022-03-05
- 记事本清楚2022-03-05
收起评论