Rust 枚举解构与用法

RustRustBeginner
立即练习

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

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

简介

在这个实验中,我们有一段代码展示了 Rust 中枚举(enum)的用法,包括如何使用 match 语句解构枚举,以及如何根据枚举变体访问关联值。

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-99312{{"Rust 枚举解构与用法"}} rust/integer_types -.-> lab-99312{{"Rust 枚举解构与用法"}} rust/function_syntax -.-> lab-99312{{"Rust 枚举解构与用法"}} rust/expressions_statements -.-> lab-99312{{"Rust 枚举解构与用法"}} rust/lifetime_specifiers -.-> lab-99312{{"Rust 枚举解构与用法"}} rust/method_syntax -.-> lab-99312{{"Rust 枚举解构与用法"}} end

枚举

枚举(enum)的解构方式类似:

// 需要使用 `allow` 来消除警告,因为这里只使用了一个变体。
#[allow(dead_code)]
enum Color {
    // 这三个变体仅通过名称指定。
    Red,
    Blue,
    Green,
    // 这些变体同样将 `u32` 元组与不同的名称关联:颜色模型。
    RGB(u32, u32, u32),
    HSV(u32, u32, u32),
    HSL(u32, u32, u32),
    CMY(u32, u32, u32),
    CMYK(u32, u32, u32, u32),
}

fn main() {
    let color = Color::RGB(122, 17, 40);
    // TODO ^ 尝试为 `color` 使用不同的变体

    println!("这是什么颜色?");
    // 可以使用 `match` 来解构枚举。
    match color {
        Color::Red   => println!("颜色是红色!"),
        Color::Blue  => println!("颜色是蓝色!"),
        Color::Green => println!("颜色是绿色!"),
        Color::RGB(r, g, b) =>
            println!("红色:{}, 绿色:{}, 蓝色:{}!", r, g, b),
        Color::HSV(h, s, v) =>
            println!("色相:{}, 饱和度:{}, 值:{}!", h, s, v),
        Color::HSL(h, s, l) =>
            println!("色相:{}, 饱和度:{}, 亮度:{}!", h, s, l),
        Color::CMY(c, m, y) =>
            println!("青色:{}, 品红色:{}, 黄色:{}!", c, m, y),
        Color::CMYK(c, m, y, k) =>
            println!("青色:{}, 品红色:{}, 黄色:{}, 关键色(黑色):{}!",
                c, m, y, k),
        // 不需要另一个分支,因为所有变体都已检查
    }
}

总结

恭喜你!你已经完成了枚举实验。你可以在 LabEx 中练习更多实验来提升你的技能。