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值和异常机制。