📅  最后修改于: 2023-12-03 15:19:53.439000             🧑  作者: Mango
枚举是Rust语言中一种常用的数据结构,它允许程序员定义一组具有唯一名称的值,每个值都可以拥有不同的数据类型。Rust中的枚举类似于C语言中的枚举,但它们拥有更多的功能和灵活性。
我们可以使用enum
关键字来定义一个枚举。下面是一个例子:
enum Direction {
Up,
Down,
Left,
Right,
}
在这个例子中,我们定义了一个名为Direction
的枚举类型,其中包含四个变量:Up
、Down
、Left
和Right
。这些变量都没有任何数据类型,这意味着它们只是符号常量。
使用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
类型的实例,并将其作为V4
或V6
枚举类型的值传递。
Rust的枚举类型提供了大量的功能和灵活性。我们可以创建一个简单的枚举类型来表示一组符号常量,也可以创建一个带有数据的枚举类型来表示更复杂的数据。使用模式匹配语法可以帮助我们根据不同的枚举值执行不同的代码。