diff --git a/src/chapter_3/chapter_3_23_1.md b/src/chapter_3/chapter_3_23_1.md new file mode 100644 index 0000000..495367c --- /dev/null +++ b/src/chapter_3/chapter_3_23_1.md @@ -0,0 +1,28 @@ +# 3.23.1 声明宏 +声明宏使用macro_rules!定义,是Rust中最常用的宏形式。下面代码中定义Vec时使用的vec!就是一个声明宏: +```Rust +fn main() { + let _v = vec![1, 2, 3]; // 使用声明宏vec!定义一个Vec +} +``` + +下面的例子演示定义一个声明宏并使用它: +```Rust +// 定义一个声明宏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); +} +```