Appearance
Rust 枚举
枚举是 Rust 中用于定义一组相关值的自定义类型。本章节将介绍 Rust 枚举的定义和使用。
枚举定义
使用 enum 关键字定义枚举:
rust
enum IpAddress {
V4(String),
V6(String),
}
fn main() {
let home = IpAddress::V4(String::from("127.0.0.1"));
let loopback = IpAddress::V6(String::from("::1"));
println!("Home IP: {:?}", home);
println!("Loopback IP: {:?}", loopback);
}枚举变体
枚举的每个可能值称为变体(variant)。变体可以包含不同类型的数据:
rust
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn main() {
let quit = Message::Quit;
let move_msg = Message::Move { x: 10, y: 20 };
let write_msg = Message::Write(String::from("Hello"));
let change_color = Message::ChangeColor(255, 0, 0);
}枚举方法
可以为枚举定义方法,使用 impl 关键字:
rust
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
impl Message {
fn call(&self) {
match self {
Message::Quit => println!("Quit message"),
Message::Move { x, y } => println!("Move to ({}, {})", x, y),
Message::Write(text) => println!("Write: {}", text),
Message::ChangeColor(r, g, b) => println!("Change color to ({}, {}, {})", r, g, b),
}
}
}
fn main() {
let message = Message::Write(String::from("Hello, Rust!"));
message.call();
}Option 枚举
Option 是 Rust 标准库中定义的一个重要枚举,用于表示可能有值或可能没有值的情况:
rust
// Option 枚举的定义
// enum Option<T> {
// None,
// Some(T),
// }
fn main() {
let some_number = Some(5);
let some_string = Some("Hello");
let absent_number: Option<i32> = None;
println!("some_number: {:?}", some_number);
println!("some_string: {:?}", some_string);
println!("absent_number: {:?}", absent_number);
}Result 枚举
Result 是 Rust 标准库中定义的另一个重要枚举,用于表示操作可能成功或失败的情况:
rust
// Result 枚举的定义
// enum Result<T, E> {
// Ok(T),
// Err(E),
// }
fn divide(numerator: f64, denominator: f64) -> Result<f64, String> {
if denominator == 0.0 {
Err(String::from("Cannot divide by zero"))
} else {
Ok(numerator / denominator)
}
}
fn main() {
match divide(10.0, 2.0) {
Ok(result) => println!("Result: {}", result),
Err(error) => println!("Error: {}", error),
}
match divide(10.0, 0.0) {
Ok(result) => println!("Result: {}", result),
Err(error) => println!("Error: {}", error),
}
}模式匹配与枚举
使用 match 语句可以对枚举进行模式匹配:
rust
enum Coin {
Penny,
Nickel,
Dime,
Quarter,
}
fn value_in_cents(coin: Coin) -> u8 {
match coin {
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter => 25,
}
}
fn main() {
let penny = Coin::Penny;
println!("Penny value: {} cents", value_in_cents(penny));
let quarter = Coin::Quarter;
println!("Quarter value: {} cents", value_in_cents(quarter));
}if let 简化匹配
对于只关心一种变体的情况,可以使用 if let 语句简化代码:
rust
fn main() {
let some_number = Some(5);
if let Some(x) = some_number {
println!("Number is: {}", x);
} else {
println!("No number");
}
}总结
- 使用
enum关键字定义枚举 - 枚举可以包含不同类型的变体
- 可以为枚举定义方法
Option枚举用于表示可能有值或可能没有值的情况Result枚举用于表示操作可能成功或失败的情况- 使用
match语句对枚举进行模式匹配 - 使用
if let语句简化枚举匹配
通过本章节的学习,你应该已经掌握了 Rust 枚举的定义和使用方法,可以在你的程序中使用枚举来表示一组相关的值。