在Rust中,我们应该会使用过像println!这样的宏,不过还没完全探索什么是宏以及它是如何工作的。宏(Macro)指的是Rust中一系列的功能:使用 macro_rules!的声明 (Declarative)宏,和三种过程的(Procedural)宏:
- 自定义 #[derive] 宏在结构体和枚举上指定通过 derive 属性添加的代码
- 类属性(Attribute-like)宏定义可用于任意项的自定义属性
- 类函数宏看起来像函数不过作用于作为参数传递的token
我们会依次讨论每一种宏,不过为什么已经有了函数还需要宏呢?