Rust 中的宏重复

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,你将学习如何在参数列表中使用带有 +* 符号的宏来表示重复。具体来说,提供的示例展示了如何使用 $(...),+ 来匹配一个或多个由逗号分隔的表达式。宏 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 中练习更多实验来提升你的技能。