📅  最后修改于: 2023-12-03 14:47:10.291000             🧑  作者: Mango
在Rust中,枚举(Enum)是一种允许你定义一个类型,它的值只能是预先定义的一组常量的类型。这些常量也被称为“变体(variants)”。
Rust的枚举使用enum
关键字来定义。以下是定义一个简单枚举的示例:
enum Direction {
Up,
Down,
Left,
Right,
}
在上面的示例中,我们定义了一个叫做Direction
的枚举。其中有四个不同的变体 Up
, Down
, Left
, 和Right
。
我们可以通过以下方式创建这些变体的实例:
let up = Direction::Up;
let down = Direction::Down;
let left = Direction::Left;
let right = Direction::Right;
Rust的枚举还可以与结构体(structs)和元祖(tuples)一起使用。以下是一个结构体和枚举结合的示例:
struct Point {
x: i32,
y: i32,
}
enum Shape {
Circle(f64),
Rectangle(Point, Point),
}
fn main() {
let circle = Shape::Circle(10.0);
let rect = Shape::Rectangle(Point { x: 0, y: 0 }, Point { x: 10, y: 10 });
}
在上述示例中,我们定义了一个结构体Point
,并将它与枚举Shape
结合在了一起。Shape
包含Circle
和Rectangle
两个变体,分别包含一个f64
值和两个Point的实例。
我们创建了一个Circle和一个Rectangle实例,并将它们存储在变量中。
除了普通的枚举,Rust还有一种“带数据的枚举(Enum with data)”,也被称为“枚举变体(enum variants)”。这些枚举变体为每个变体提供了单独的数据。
以下是一个带数据的枚举示例:
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
fn main() {
let home = IpAddr::V4(127, 0, 0, 1);
let loopback = IpAddr::V6(String::from("::1"));
}
在上面的示例中,我们定义了IpAddr
带数据的枚举。其中每个变体都有不同的数据类型,V4
变体包含4个u8
值,V6
包含一个字符串类型。
我们使用V4
和V6
变体创建了两个IpAddr
实例。
Rust中的枚举是强类型和安全的。因此,在编写代码时,尽可能使用枚举是一个很好的实践。