宏编程 #

一、声明宏 #

rust
macro_rules! my_vec {
    ($($x:expr),*) => {
        {
            let mut temp_vec = Vec::new();
            $(
                temp_vec.push($x);
            )*
            temp_vec
        }
    };
}

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

二、过程宏 #

2.1 派生宏 #

rust
use proc_macro::TokenStream;

#[proc_macro_derive(HelloMacro)]
pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
    // 实现
    TokenStream::new()
}

2.2 属性宏 #

rust
#[proc_macro_attribute]
pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream {
    item
}

2.3 函数式宏 #

rust
#[proc_macro]
pub fn sql(input: TokenStream) -> TokenStream {
    input
}

三、总结 #

本章学习了:

  • 声明宏
  • 过程宏类型
最后更新:2026-03-27