Rust 中的宏重复

RustRustBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何在参数列表中使用带有 +* 符号的宏来表示重复。具体来说,提供的示例展示了如何使用 $(...),+ 来匹配一个或多个由逗号分隔的表达式。宏 find_min! 计算可变数量参数中的最小值。

注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用 main.rs,通过 rustc main.rs &&./main 进行编译和运行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/function_syntax -.-> lab-99227{{"Rust 中的宏重复"}} rust/expressions_statements -.-> lab-99227{{"Rust 中的宏重复"}} rust/method_syntax -.-> lab-99227{{"Rust 中的宏重复"}} end

重复

宏可以在参数列表中使用 + 来表示一个参数可以至少重复一次,或者使用 * 来表示该参数可以重复零次或更多次。

在以下示例中,用 $(...),+ 包围匹配器将匹配一个或多个由逗号分隔的表达式。另请注意,在最后一种情况中,分号是可选的。

// `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 中练习更多实验来提升你的技能。