目录

  1. 什么是 Rust 枚举
  2. 为什么要使用枚举
  3. 枚举的定义与使用
  4. 枚举与模式匹配
  5. 枚举中的方法
  6. 代码示例
  7. 参考资料与出站链接

什么是 Rust 枚举

Rust 枚举 (Enum) 是一种自定义类型,允许定义一组有限的变体 (variants)。每个变体可以携带数据(如值或结构体),是表达多种可能状态的强大工具。Rust 的枚举类似于代数数据类型 (ADT)。


为什么要使用枚举

  • 类型安全:限制值到特定集合。
  • 表达力:清晰表示多种状态或选项。
  • 模式匹配:与 matchif let 配合,处理不同情况。
  • 数据携带:变体可附带复杂数据。

枚举的定义与使用

  • 定义:使用 enum 关键字。
  • 变体类型
  • 无数据变体。
  • 带数据的元组变体。
  • 带数据的结构体变体。
enum Direction {
    Up,
    Down(i32),         // 元组变体
    Left { x: i32, y: i32 },  // 结构体变体
}

枚举与模式匹配

  • match:完整匹配所有变体。
  • if let:匹配特定变体。
let dir = Direction::Down(5);
match dir {
    Direction::Up => println!("Up"),
    Direction::Down(n) => println!("Down by {}", n),
    Direction::Left { x, y } => println!("Left at ({}, {})", x, y),
}

枚举中的方法

  • 使用 impl 为枚举定义方法。
  • 可访问变体数据或执行逻辑。
impl Direction {
    fn describe(&self) -> &str {
        match self {
            Direction::Up => "Upward",
            Direction::Down(_) => "Downward",
            Direction::Left { .. } => "Leftward",
        }
    }
}

代码示例

基本枚举

enum Color {
    Red,
    Green,
    Blue,
}

fn main() {
    let c = Color::Red;
    match c {
        Color::Red => println!("Red"),
        Color::Green => println!("Green"),
        Color::Blue => println!("Blue"),
    }
}

运行结果:

Red

带数据的枚举

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
}

fn main() {
    let msg = Message::Move { x: 10, y: 20 };
    if let Message::Move { x, y } = msg {
        println!("Move to ({}, {})", x, y);
    }
}

运行结果:

Move to (10, 20)

枚举与方法

enum Operation {
    Add(i32, i32),
    Subtract(i32, i32),
}

impl Operation {
    fn execute(&self) -> i32 {
        match self {
            Operation::Add(a, b) => a + b,
            Operation::Subtract(a, b) => a - b,
        }
    }
}

fn main() {
    let op = Operation::Add(5, 3);
    println!("Result: {}", op.execute());
}

运行结果:

Result: 8

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 社区支持