跳到主要内容

macros

宏:声明式与过程宏

声明式宏(macro_rules!)

// 一个简化版的 vec! 宏
macro_rules! my_vec {
( $( $x:expr ),* $(,)? ) => {{
let mut v = Vec::new();
$( v.push($x); )*
v
}};
}

fn main() { let v = my_vec![1,2,3]; println!("{:?}", v); }

过程宏(派生/属性/函数式)

  • 派生宏:#[derive(Serialize, Deserialize)]
  • 属性宏:#[route(GET, "/")]
  • 函数式宏:foo!(...)

过程宏需在单独的 proc-macro crate 中实现,解析/生成 Rust 语法树(syn/quote)。

与 Go 对照

  • Go 倚赖生成工具(go generatestringer)与编译器内置泛型/接口;Rust 宏是语言级元编程能力,表达力更强但也更复杂。