Rust 编程中的可变参数接口

RustRustBeginner
立即练习

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

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

简介

在本实验中,我们将探索可变参数接口,即可以接受任意数量参数的接口。例如,我们将上一节中的 calculate! 宏修改为可变参数形式,使其能够一次性计算多个表达式。

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") subgraph Lab Skills rust/variable_declarations -.-> lab-99230{{"Rust 编程中的可变参数接口"}} rust/function_syntax -.-> lab-99230{{"Rust 编程中的可变参数接口"}} rust/expressions_statements -.-> lab-99230{{"Rust 编程中的可变参数接口"}} end

可变参数接口

可变参数接口可以接受任意数量的参数。例如,println! 可以根据格式字符串接受任意数量的参数。

我们可以将上一节中的 calculate! 宏扩展为可变参数形式:

macro_rules! calculate {
    // 单个 `eval` 的模式
    (eval $e:expr) => {
        {
            let val: usize = $e; // 强制类型为整数
            println!("{} = {}", stringify!{$e}, val);
        }
    };

    // 递归分解多个 `eval`
    (eval $e:expr, $(eval $es:expr),+) => {{
        calculate! { eval $e }
        calculate! { $(eval $es),+ }
    }};
}

fn main() {
    calculate! { // 看呐!可变参数的 `calculate!`!
        eval 1 + 2,
        eval 3 + 4,
        eval (2 * 3) + 1
    }
}

输出:

1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7

总结

恭喜你!你已经完成了可变参数接口实验。你可以在 LabEx 中练习更多实验来提升你的技能。