Разбор и использование перечислений (enum) в Rust

RustRustBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном задании есть код, демонстрирующий использование перечислений (enum) в Rust, включая то, как деструктурировать перечисление с использованием инструкции match и получать доступ к связанным значениям в зависимости от варианта перечисления.

Примечание: Если в лабораторном задании не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с помощью rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) 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{{"Разбор и использование перечислений (enum) в Rust"}} rust/integer_types -.-> lab-99312{{"Разбор и использование перечислений (enum) в Rust"}} rust/function_syntax -.-> lab-99312{{"Разбор и использование перечислений (enum) в Rust"}} rust/expressions_statements -.-> lab-99312{{"Разбор и использование перечислений (enum) в Rust"}} rust/lifetime_specifiers -.-> lab-99312{{"Разбор и использование перечислений (enum) в Rust"}} rust/method_syntax -.-> lab-99312{{"Разбор и использование перечислений (enum) в Rust"}} end

Перечисления (enum)

Перечисление (enum) деструктурируется аналогично:

// Требуется `allow`, чтобы подавить предупреждения, так как
// используется только один вариант.
#[allow(dead_code)]
enum Color {
    // Эти 3 определяются только именем.
    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!("Какой это цвет?");
    // Перечисление (`enum`) можно деструктурировать с использованием `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),
        // Не нужно дополнительный случай, так как все варианты уже проверены
    }
}

Резюме

Поздравляем! Вы завершили лабораторную работу по перечислениям (enum). Вы можете выполнить больше лабораторных работ в LabEx, чтобы улучшить свои навыки.