📜  rust 匹配枚举 - Rust (1)

📅  最后修改于: 2023-12-03 15:04:57.879000             🧑  作者: Mango

Rust 匹配枚举

在 Rust 中,枚举类型是一种非常常见的数据结构。在很多场景下,我们需要根据枚举值的不同采取不同的逻辑操作。

这时候,我们就可以使用 Rust 中的 match 表达式来实现枚举匹配。下面是一个简单的示例:

enum Fruit {
    Apple,
    Banana,
    Orange,
}

fn main() {
    let my_fruit = Fruit::Apple;

    match my_fruit {
        Fruit::Apple => println!("I have an apple"),
        Fruit::Banana => println!("I have a banana"),
        Fruit::Orange => println!("I have an orange"),
    }
}

在这个例子中,我们定义了一个枚举类型 Fruit,并且定义了一个变量 my_fruit,其值为 Fruit::Apple

接着,我们使用 match 表达式来匹配 my_fruit 的值,如果匹配到 Fruit::Apple,则输出字符串 “I have an apple”,以此类推。

匹配值绑定

在匹配枚举值的时候,我们可以通过 match 表达式的模式匹配语法,进行值绑定,来获取枚举变量的值。例如:

enum Option<T> {
    Some(T),
    None,
}

fn main() {
    let my_option = Option::Some(42);

    match my_option {
        Option::Some(val) => println!("The value is {}", val),
        Option::None => println!("The value is None"),
    }
}

在这个例子中,我们定义了一个 Option 枚举类型,它拥有两个成员:SomeNone。其中,Some 成员带有一个泛型参数,表示可能存在的值。

接着,我们定义了一个变量 my_option,其值为 Option::Some(42)

最后,我们使用 match 表达式来匹配 my_option 的值,如果匹配到 Option::Some(val),则使用值绑定给变量 val,并输出字符串 “The value is 42”。

匹配通配符

在匹配枚举值的时候,我们还可以使用通配符 _ 来匹配任意的枚举值。例如:

enum PaymentMethod {
    CreditCard,
    Paypal,
    Alipay,
}

fn main() {
    let my_payment_method = PaymentMethod::CreditCard;

    match my_payment_method {
        PaymentMethod::CreditCard => println!("I choose CreditCard"),
        _ => println!("I choose something else"),
    }
}

在这个例子中,我们定义了一个 PaymentMethod 枚举类型,其值为 CreditCardPaypalAlipay

接着,我们定义了一个变量 my_payment_method,其值为 PaymentMethod::CreditCard

然后,我们使用 match 表达式来匹配 my_payment_method 的值。由于我们只关心 CreditCard 的情况,因此我们将其放在第一个分支里面;而对于其他所有的情况,则使用通配符 _ 进行匹配,并输出字符串 “I choose something else”。

匹配多个分支

在实际开发中,我们经常需要匹配多个枚举值。这时候,我们可以使用逗号 , 将多个分支合并在一起。例如:

enum StatusCode {
    OK,
    BadRequest,
    Unauthorized,
    Forbidden,
    NotFound,
    ServerError,
}

fn main() {
    let my_status_code = StatusCode::NotFound;

    match my_status_code {
        StatusCode::OK => println!("Status code is 200"),
        StatusCode::BadRequest | StatusCode::Unauthorized | StatusCode::Forbidden => println!("Status code is 4xx"),
        StatusCode::NotFound => println!("Status code is 404"),
        _ => println!("Status code is something else"),
    }
}

在这个例子中,我们定义了一个 StatusCode 枚举类型,其值为常见的 HTTP 状态码。

接着,我们定义了一个变量 my_status_code,其值为 StatusCode::NotFound

然后,我们使用 match 表达式来匹配 my_status_code 的值。其中,第二个分支中使用了逗号 , 将多个枚举值合并在一起,这意味着当 my_status_code 的值为 BadRequestUnauthorized 或者 Forbidden 时,都会执行这个分支的代码,输出字符串 “Status code is 4xx”。

结论

本文介绍了 Rust 中如何匹配枚举类型,包括匹配固定值、值绑定、通配符和多个分支。在实际开发中,我们经常需要根据枚举变量的不同值,采取不同的逻辑操作,因此这些技巧非常有用。