Rust 枚举类
Rust 枚举类
枚举类是 Rust 中的一种自定义数据类型。它允许定义一组值中的所有可能情况,并将其作为单个类型来使用。在 Rust 中,枚举类被称为 enum
。
定义枚举类
Rust 中定义枚举类的语法如下:
enum Name{
Item1,
Item2,
Item3,
...
}
其中,Name
是枚举类的名称,Item1
、Item2
、Item3
等是枚举类的变体,也可以称为枚举成员或枚举项。
每个变体的值都是唯一的,并可以按照下标来访问。例如,如果有一个枚举类Fruit
,其中包含Apple
、Banana
和Orange
三个变量,那么可以通过下标访问它们的值。
enum Fruit{
Apple,
Banana,
Orange,
}
fn main(){
let fruit1 = Fruit::Apple;
let fruit2 = Fruit::Banana;
let fruit3 = Fruit::Orange;
println!("{}", fruit1 as i32); // 0
println!("{}", fruit2 as i32); // 1
println!("{}", fruit3 as i32); // 2
}
在上面的示例中,枚举类型Fruit
中的每个成员都有一个唯一的数字值。通过as
运算符可以将枚举成员强制转换为整数类型。
使用枚举类
在 Rust 中,枚举类通常用于模式匹配中。模式匹配是一种强大的 Rust 函数,可以通过与不同的模式匹配来实现不同的行为。例如,以下代码使用match
语句检查变量值并执行相应的操作:
enum Coin{
Penny,
Nickel,
Dime,
Quarter,
}
fn value_in_cents(coin: Coin) -> u32{
match coin{
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter => 25,
}
}
fn main(){
let coin1 = Coin::Penny;
let coin2 = Coin::Nickel;
let coin3 = Coin::Dime;
let coin4 = Coin::Quarter;
println!("{}", value_in_cents(coin1)); // 1
println!("{}", value_in_cents(coin2)); // 5
println!("{}", value_in_cents(coin3)); // 10
println!("{}", value_in_cents(coin4)); // 25
}
在上面的示例中,value_in_cents
函数接受一个枚举Coin
作为参数,并使用match
语句检查不同的枚举成员,然后返回相应的值。运行函数将返回与传递的枚举成员匹配的值。
关联数据
Rust 的枚举还允许与每个成员关联数据。这种数据称为关联数据(associated data)。例如,考虑以下枚举类型:
enum IPAddr{
V4(String),
V6(String),
}
在上面的示例中,IPAddr
类型有两个成员V4
和V6
,分别用于存储 IPv4 地址和 IPv6 地址。但是,它们都需要一些数据来存储 IP 地址。因此,这些成员都采用了一个String
类型的参数来接收 IP 地址。这种参数被称为枚举的关联数据。
可以通过以下方式访问关联数据:
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"));
match home {
IPAddr::V4(ip) => println!("home is IPv4 address {}", ip),
IPAddr::V6(ip) => println!("home is IPv6 address {}", ip),
}
match loopback {
IPAddr::V4(ip) => println!("loopback is IPv4 address {}", ip),
IPAddr::V6(ip) => println!("loopback is IPv6 address {}", ip),
}
}
在上面的代码示例中,我们创建了变量home
和loopback
,这些变量包含了每个成员的关联数据。我们使用match
语句来检查每个成员,并访问相应的关联数据。
总结
Rust 的枚举是一种强大的自定义类型,可以定义一个枚举成员的有限集合并为每个成员分配唯一值。枚举类型通常在 Rust 中用于模式匹配和状态机等场景中,并且它还可以使用关联数据来存储更复杂的数据结构。