Rust的宏(macro)
指一组相关特性的集合。
介绍
- 使用
macro_rules!
构建的 声明宏(declarative macro)
,标记为弃用,需要满足 macro_rules!
- 3中过程宏
- 自定义
#[derive]
宏- 用在
struct
或 enum
,为其指定随 derive
属性添加的代码
- 类似属性的宏,属性宏允许重建新的属性
- 在任何条目上添加自定义属性,如函数
#[route(GET, "/")\nfn index(){}
- 类似函数的宏,看起来像函数调用,对其指定为参数的 token 进行操作
函数和宏的差别
- 宏
- 宏是用来编写可以生成其他代码的代码(元编程, meta-programing)
- 编译器在解释代码前展开宏
- 宏的定义比函数复杂,难以理解、阅读、维护
- 函数在定义签名时,必须声明参数的个数和类型,宏可处理可变的参数
- 调用宏时,必须提前定义宏或引入宏到当前作用域;函数可以在任何位置定义和使用
struct 格式化输出
struct 上加注解 #[derive(Debug)]
{:?}
// 行输出{:#?}
// 格式化输出std::fmt::Display
和 std::fmt::Debug
常见宏:
- 标准输出(stdout):
println!
- 标准错误(stderr):
eprintln!