宏在编译过程中会扩展为 Rust 代码,并且可以接受可变数量的参数。它们以 ! 结尾来进行区分。Rust 标准库包含各种有用的宏。

  • println!(format, ..) prints a line to standard output, applying formatting described in std::fmt.
  • format!(format, ..) 的用法与 println! 类似,但它以字符串形式返回结果。
  • dbg!(expression) 会记录表达式的值并返回该值。
  • todo!() 用于标记尚未实现的代码段。如果执行该代码段,则会触发 panic。
  • unreachable!() 用于标记无法访问的代码段。如果执行该代码段,则会触发 panic。
  1. fn factorial(n: u32) -> u32 {
  2. let mut product = 1;
  3. for i in 1..=n {
  4. product *= dbg!(i);
  5. }
  6. product
  7. }
  8. fn fizzbuzz(n: u32) -> u32 {
  9. todo!()
  10. }
  11. fn main() {
  12. let n = 4;
  13. println!("{n}! = {}", factorial(n));
  14. }

This slide should take about 2 minutes.

这一节的要点是介绍这些常见的便捷功能以及如何使用它们。而为何将它们定义为宏以及它们可以扩展为什么内容,并不是特别关键。

本课程不会介绍如何定义宏,但在后续部分会介绍派生宏的用法。