📜  rust lang enum - Rust (1)

📅  最后修改于: 2023-12-03 14:47:10.291000             🧑  作者: Mango

Rust语言中的枚举(Enum)

在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包含CircleRectangle两个变体,分别包含一个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包含一个字符串类型。

我们使用V4V6变体创建了两个IpAddr实例。

Rust中的枚举是强类型和安全的。因此,在编写代码时,尽可能使用枚举是一个很好的实践。