Rust中的枚举(enum)是一种强大的数据类型,允许定义一组可能的值。以下是其主要用法:
1. 基本枚举
定义一组简单的命名常量:
enum Color {
    Red,
    Green,
    Blue,
}
2. 带数据的枚举
枚举变体可以携带不同类型的数据:
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}
3. 模式匹配
使用match处理枚举:
fn handle_message(msg: Message) {
    match msg {
        Message::Quit => println!("退出"),
        Message::Move { x, y } => println!("移动到 ({}, {})", x, y),
        Message::Write(text) => println!("文本: {}", text),
        Message::ChangeColor(r, g, b) => println!("颜色: RGB({}, {}, {})", r, g, b),
    }
}
4. Option枚举
Rust标准库中的Option<T>用于处理可能不存在的值:
fn find_item(items: &[i32], target: i32) -> Option<usize> {
    items.iter().position(|&x| x == target)
}
// 使用
let idx = find_item(&[1, 2, 3], 2);
match idx {
    Some(i) => println!("找到索引: {}", i),
    None => println!("未找到"),
}
5. Result枚举
用于错误处理:
fn divide(a: f64, b: f64) -> Result<f64, String> {
    if b == 0.0 {
        Err("除数不能为零".to_string())
    } else {
        Ok(a / b)
    }
}
// 使用
match divide(10.0, 2.0) {
    Ok(result) => println!("结果: {}", result),
    Err(e) => println!("错误: {}", e),
}
6. if let 简化匹配
当只关心一个变体时:
if let Some(value) = some_option {
    println!("值为: {}", value);
}
7. 方法实现
可以为枚举定义方法:
impl Message {
    fn call(&self) {
        // 方法实现
    }
}
枚举是Rust类型系统的核心特性,结合模式匹配提供了安全、表达力强的编程方式,有效替代了其他语言中的null值和异常机制。