From dd89252839456b4e78c1c511d8652824b9d5adc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=A4=E7=8B=90=E4=B8=80=E5=86=B2?= <43949039+anonymousGiga@users.noreply.github.com> Date: Thu, 18 May 2023 11:30:28 +0800 Subject: [PATCH] Create chapter_3_23_1.md --- src/chapter_3/chapter_3_23_1.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/chapter_3/chapter_3_23_1.md 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); +} +```