Rust 学习笔记 26:宏入门 (Macros)

Rust 学习笔记 26:宏入门 (Macros) “Code that writes code.” 我们从第一天开始就在用宏:println!。 宏 (Macro) 允许我们在编译期生成代码。这被称为元编程 (Metaprogramming)。 1. 宏 vs 函数 特性 宏 函数 参数数量 可变参数 (println!("{}, {}", a, b)) 固定参数个数 调用时机 编译期展开 (生成代码) 运行时调用 功能 可以定义 DSL,可以操作语法树 只能执行普通逻辑 维护性 编写复杂,调试困难 易于编写和调试 2. 声明式宏 (macro_rules!) 这是 Rust 中最常见的宏类型,类似于 match 匹配。 让我们复刻一个 vec! 宏: 1macro_rules! my_vec { 2 // 匹配模式: ( $( $x:expr ),* ) 3 // $x:expr -> 捕获一个表达式,命名为 x 4 // $(...),* -> 重复匹配括号内的内容,以逗号分隔 5 ( $( $x:expr ),* $(,)? ) => { 6 { 7 let mut temp_vec = Vec::new(); 8 // $(...)* -> 对每一次匹配进行重复展开 9 $( 10 temp_vec.push($x); 11 )* 12 temp_vec 13 } 14 }; 15} 16 17let v = my_vec![1, 2, 3]; 18let v2 = my_vec![1, 2, 3,]; // 也支持末尾逗号 这里发生了什么? ...

2026-05-20 · 2 min · 225 words · 老墨