macro_rules!
Rust 提供了一个强大的宏系统,允许元编程。正如你在之前的章节中所看到的,宏看起来像函数,除了它们的名称以感叹号 !
结尾,但是宏不是生成函数调用,而是扩展为源代码,这些源代码会与程序的其余部分一起编译。然而,与 C 和其他语言中的宏不同,Rust 宏扩展为抽象语法树,而不是字符串预处理,因此你不会遇到意外的优先级错误。
宏使用 macro_rules!
宏创建。
那么,为什么宏有用呢?
-
不要重复自己。在很多情况下,你可能需要在多个地方使用类似的功能,但类型不同。通常,编写宏是避免重复代码的有效方法。(稍后会详细介绍)
-
特定领域语言。宏允许你为特定目的定义特殊的语法。(稍后会详细介绍)
-
可变参数接口。有时你希望定义一个接口,该接口接受可变数量的参数。一个例子是
println!
,它可以接受任意数量的参数,具体取决于格式字符串。(稍后会详细介绍)