3.23.1 声明宏

声明宏使用macro_rules!定义,是Rust中最常用的宏形式。下面代码中定义Vec时使用的vec!就是一个声明宏:

fn main() {
    let _v = vec![1, 2, 3];  // 使用声明宏vec!定义一个Vec
}

下面的例子演示定义一个声明宏并使用它:

// 定义一个声明宏my_vec
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];  // 使用声明宏 my_vec!
    println!("v: = {:?}", v);
}