Skebのリクエストありがとうございました🌸
623 字
3 分钟
Rust语言学习:枚举
枚举(Enumeration)是一种允许我们列举所有可能的值来定义一个类型的方式。
定义枚举
我们可以使用 enum 关键字来定义一个枚举类型,它的每个成员(变体)都可以代表一种可能的值。
enum IpAddrKind { V4, V6,}将数据附加到枚举变体
Rust 的枚举一个强大的功能是,每个变体都可以关联不同类型和数量的数据。
enum IpAddrKind { V4(String), V6(String),}
let home = IpAddrKind::V4(String::from("127.0.0.1"));let loopback = IpAddrKind::V6(String::from("::1"));我们还可以为每个变体定义不同类型和结构的关联数据。
enum Message { Quit, Move { x: i32, y: i32 }, // 关联一个匿名结构体 Write(String), // 关联一个 String ChangeColor(u8, u8, u8), // 关联一个三元组}为枚举实现方法
与结构体类似,我们也可以使用 impl 关键字为枚举定义方法。
impl Message { fn process(&self) { match self { Message::Quit => println!("Quit message received"), Message::Move { x, y } => println!("Move message received: x={}, y={}", x, y), Message::Write(text) => println!("Write message received: {}", text), Message::ChangeColor(r, g, b) => println!("ChangeColor message received: r={}, g={}, b={}", r, g, b), } }}Option 枚举
Option 是一个由标准库定义的非常重要的枚举。它用于处理一个值可能存在或不存在的情况,有效地替代了其他语言中普遍存在的 null。
Option<T> 的定义如下:
enum Option<T> { Some(T), // 表示存在一个 T 类型的值 None, // 表示不存在值}使用 Option 可以让编译器强制我们处理值不存在的情况,从而提高代码的健壮性。
let x: i8 = 4;let y: Option<i8> = Some(6);
// 为了处理 y 可能为 None 的情况,不能直接将 x 和 y 相加// 必须使用 match 表达式来处理match y { Some(val) => println!("x + y = {}", x + val), None => println!("y is None"),}match 控制流运算符
match 是 Rust 中一个强大的控制流运算符,它允许我们将一个值与一系列模式进行比较,并根据匹配的模式执行相应的代码。match 常常与枚举一起使用,以确保我们处理了所有可能的变体。
match 的匹配是穷尽的,这意味着我们必须为所有可能的值提供一个分支。这在处理枚举时特别有用,因为编译器会检查是否遗漏了任何变体。
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, }}评论