Rust 宏:圣旨到的魔法
宏是 Rust 中最强大的功能之一,它允许我们在编译时生成代码。
📜 声明宏 (macro_rules!)
最常见的宏,使用模式匹配来替换代码。
#[macro_export]
macro_rules! say_hello {
() => {
println!("Hello!");
};
($name:expr) => {
println!("Hello, {}!", $name);
};
}
fn main() {
say_hello!(); // 展开为 println!("Hello!");
say_hello!("包龙星"); // 展开为 println!("Hello, 包龙星!");
}
🏗️ 过程宏 (Procedural Macros)
过程宏接收 Rust 代码作为输入,操作它,然后产生新的 Rust 代码。类似于插件。
- 派生宏 (Derive Macros):
#[derive(Debug)] - 属性宏 (Attribute Macros):
#[route(GET, "/")] - 函数宏 (Function-like Macros):
sql!("SELECT * FROM users")
🆚 宏 vs 函数
宏可以接收可变数量的参数(如 println!),而函数不行。宏在编译时展开,所以可以用来定义 DSL。