头条地址:https://www.ixigua.com/i6775861706447913485
B站地址:https://www.bilibili.com/video/av81202308/
github地址:https://github.com/anonymousGiga/learn_rust
讲解内容使用marco_rules!的声明宏
例子1:
let v = vec![1, 2, 3];//vec!就是用marco_rules!的声明宏
例子2:
(1)mkdir learn_marco1
(2)cd learn_marco1
(3)vim Cargo.toml,编辑工作空间:
[workspace]
members = [
"mac",
"main",
]
(4)cargo new mac --lib
(5)编辑mac/src/lib.rs:
#[macro_export]
macro_rules! my_vec {
( $( $x:expr ),* ) => {
{
let mut temp_vec = Vec::new();
$(
temp_vec.push($x);
)*
temp_vec
}
};
}
(6)cargo new main
(7)编辑main/Cargo.toml添加:
[dependencies]
mac = {path = "../mac"}
(8)编辑main/src/main.rs如下:
use mac;
fn main() {
let v = mac::my_vec![1, 2, 3];
println!("v = {:?}", v);
println!("Hello, world!");
}
说明:在上面的例子中定义了声明宏,并在main中进行使用。宏中的代码等价于如下
let mut temp_vec = Vec::new();
temp_vec.push(1);
temp_vec.push(2);
temp_vec.push(3);
temp_vec