简介
在本实验中,你将学习如何在参数列表中使用带有 + 和 * 符号的宏来表示重复。具体来说,提供的示例展示了如何使用 $(...),+ 来匹配一个或多个由逗号分隔的表达式。宏 find_min! 计算可变数量参数中的最小值。
注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用
main.rs,通过rustc main.rs &&./main进行编译和运行。
在本实验中,你将学习如何在参数列表中使用带有 + 和 * 符号的宏来表示重复。具体来说,提供的示例展示了如何使用 $(...),+ 来匹配一个或多个由逗号分隔的表达式。宏 find_min! 计算可变数量参数中的最小值。
注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用
main.rs,通过rustc main.rs &&./main进行编译和运行。
宏可以在参数列表中使用 + 来表示一个参数可以至少重复一次,或者使用 * 来表示该参数可以重复零次或更多次。
在以下示例中,用 $(...),+ 包围匹配器将匹配一个或多个由逗号分隔的表达式。另请注意,在最后一种情况中,分号是可选的。
// `find_min!` 将计算任意数量参数中的最小值。
macro_rules! find_min {
// 基本情况:
($x:expr) => ($x);
// `$x` 后面跟着至少一个 `$y,`
($x:expr, $($y:expr),+) => (
// 对尾部的 `$y` 调用 `find_min!`
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));
}
恭喜你!你已经完成了“重复”实验。你可以在 LabEx 中练习更多实验来提升你的技能。