重复
宏可以使用 +
在参数列表中表示一个参数可以重复至少一次,或者使用 *
表示参数可以重复零次或多次。
在下面的例子中,用 $(...),+
包裹匹配器将匹配一个或多个表达式,用逗号分隔。还要注意,最后一个case后面的分号是可选的。
// `find_min!` will calculate the minimum of any number of arguments. macro_rules! find_min { // Base case: ($x:expr) => ($x); // `$x` followed by at least one `$y,` ($x:expr, $($y:expr),+) => ( // Call `find_min!` on the tail `$y` std::cmp::min($x, find_min!($($y),+)) ) } fn main() { println!("{}", find_min!(1)); println!("{}", find_min!(1 + 2, 2)); println!("{}", find_min!(5, 2 * 3, 4)); }