📜  Rust枚举(1)

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

Rust枚举

枚举是Rust语言中一种常用的数据结构,它允许程序员定义一组具有唯一名称的值,每个值都可以拥有不同的数据类型。Rust中的枚举类似于C语言中的枚举,但它们拥有更多的功能和灵活性。

定义枚举

我们可以使用enum关键字来定义一个枚举。下面是一个例子:

enum Direction {
    Up,
    Down,
    Left,
    Right,
}

在这个例子中,我们定义了一个名为Direction的枚举类型,其中包含四个变量:UpDownLeftRight。这些变量都没有任何数据类型,这意味着它们只是符号常量。

枚举的用法

使用Rust枚举时,一般情况下我们会使用模式匹配语法。模式匹配语法允许我们根据不同的枚举值执行不同的代码。下面是一个例子:

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}

#[derive(Debug)]
enum UsState {
    Alabama,
    Alaska,
    // 省略部分代码
}

fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => {
            println!("Lucky penny!");
            1
        },
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter(state) => {
            println!("State quarter from {:?}!", state);
            25
        },
    }
}

fn main() {
    let coin = Coin::Quarter(UsState::Alaska);
    let value = value_in_cents(coin);
    println!("The value of {:?} is {} cents.", coin, value);
}

在这个例子中,我们定义了一个Coin枚举类型,其中包含四个变量,其中一个变量包含一个UsState类型的数据。然后我们定义了一个value_in_cents函数,它根据不同的Coin类型计算其价值并返回。我们使用match语句来匹配不同的Coin类型,执行不同的代码。

带数据的枚举

我们也可以定义一个带有数据的枚举类型。下面是一个例子:

enum IpAddr {
    V4(String),
    V6(String),
}

fn main() {
    let home = IpAddr::V4(String::from("127.0.0.1"));
    let loopback = IpAddr::V6(String::from("::1"));
    println!("{:?}, {:?}", home, loopback);
}

在这个例子中,我们定义了一个IpAddr枚举类型,其中包含两个变量,每个变量都包含一个String类型的数据。我们使用String::from函数创建了一个String类型的实例,并将其作为V4V6枚举类型的值传递。

总结

Rust的枚举类型提供了大量的功能和灵活性。我们可以创建一个简单的枚举类型来表示一组符号常量,也可以创建一个带有数据的枚举类型来表示更复杂的数据。使用模式匹配语法可以帮助我们根据不同的枚举值执行不同的代码。