Rust 宏:从基础到高级应用
1. 宏中的重复机制
在 Rust 中,除了处理标记树类型,我们还需要一种方法来重复生成代码的某些部分。标准库中的 vec![]
宏就是一个实际例子,它依赖重复机制来模拟可变参数,允许以多种方式创建 Vec
:
vec![1, 2, 3];
vec![9, 8, 7, 6, 5, 4];
以下是标准库中 vec!
宏的 macro_rules!
定义:
macro_rules! vec {
($elem:expr; $n:expr) => (
$crate::vec::from_elem($elem, $n)
);
($($x:expr),*) => (
< [_]> ::into_vec(box [$($x),*])
);
($($x:expr,)*) => (vec![$($x),*])
}
忽略 =>
右侧的细节,关注左侧的后两个匹配规则,会发现新的内容:
($($x:expr),*)
($($x:expr,)*)
这些是重复规则,重复模式规则为: pattern: