0Pricing
Learn Rust Coding · 课时

用于自定义类型的枚举

使用枚举定义可取多个变体之一的类型,这些变体通常还会携带关联数据。

用于自定义类型的枚举 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 3 节课。

枚举:自定义类型选择

欢迎学习用于自定义类型的枚举!在 Rust 中,枚举(enumeration)允许您定义一种类型,使其可以是多个可能且彼此不同的变体之一。

您可以把枚举理解为:“这个项目可以是 A、或 B、或 C。”它非常适合表示不同的状态或选项。

定义简单枚举

要定义枚举,请使用 enum 关键字,后跟枚举名称和包含各个变体的花括号。每个变体都是一个独特的选项。

下面是一个表示基本方向的简单示例:

enum Direction {
  North,
  South,
  East,
  West,
}

fn main() {
  let my_direction = Direction::North;
  println!("My direction is {:?}", my_direction);
}

带关联数据的枚举

与简单变体不同,枚举变体还可以保存数据!这使枚举非常强大,因为每个变体都可以携带自己独特的信息集合。

数据可以是元组(例如 (i32, String)),也可以是结构体(例如 { x: i32, y: i32 })。

关联数据实战

让我们看看一个枚举,其中每个变体表示不同类型的消息,有些变体携带数据,有些则不携带。

请注意,Move 使用结构体,Write 使用 String,而 ChangeColor 使用元组。

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

fn main() {
  let m1 = Message::Quit;
  let m2 = Message::Move { x: 10, y: 20 };
  let m3 = Message::Write(String::from("hello"));
  let m4 = Message::ChangeColor(255, 0, 128);

  // We can't directly print enums with associated data using {:?}
  // without deriving Debug, which we'll cover later.
  // For now, just know these instances are created.
  println!("Messages created!");
}

`Option` 枚举:处理缺失值

Rust 最基础的枚举之一是 Option<T>。它用于表示某个值可能存在,也可能不存在,从而避免其他语言中常见的空指针错误。

  • Some(T):保存 T 类型值的变体。
  • None:表示没有值的变体。

有效使用 `Option<T>`

Option<T> 会强制您明确处理 Some 和 None 两种情况,让代码更安全、更健壮。不再有意外的 null 崩溃!

下面是使用它的一种方式:

fn find_item(id: i32) -> Option<String> {
  if id == 7 {
    Some(String::from("Found item 7!"))
  } else {
    None
  }
}

fn main() {
  let item1 = find_item(7);
  let item2 = find_item(5);

  println!("Item 1: {:?}", item1);
  println!("Item 2: {:?}", item2);
}

简述:`Result` 枚举

另一个重要的枚举是 Result<T, E>,用于处理错误。它有两个变体:

  • Ok(T):表示成功,并包含成功的值。
  • Err(E):表示失败,并包含错误值。

我们将在后面的课程中深入学习 Result,但现在了解这是另一种强大的枚举模式也很有帮助!

枚举的方法

与结构体一样,您可以使用 impl 块为枚举定义方法。这些方法可以执行操作,也可以根据枚举的变体返回值。

让我们为之前的 Message 枚举添加一个 call 方法:

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

impl Message {
  fn call(&self) {
    println!("A message was called!");
  }
}

fn main() {
  let m = Message::Write(String::from("hello"));
  m.call();
}

枚举快速检查

以下关于 Rust 枚举的说法哪些是正确的?

回顾:使用枚举定义自定义类型

做得很好!您已经了解了 Rust 枚举如何提供一种强大的方式,用于定义可以是多个变体之一的自定义类型。

  • 枚举可以清晰地表示选择和状态。
  • 变体可以携带关联数据,因此具有很高的灵活性。
  • Option<T> 枚举对于安全地处理值的缺失至关重要。
  • 可以使用 impl 块为枚举定义方法。

接下来,我们将探索如何使用强大的模式匹配来处理这些枚举变体!

常见问题解答

「用于自定义类型的枚举」课时是免费的吗?

是的 — 「用于自定义类型的枚举」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 3 节课。

「用于自定义类型的枚举」这节课中我会学到什么?

使用枚举定义可取多个变体之一的类型,这些变体通常还会携带关联数据。 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn Rust Coding 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。

「用于自定义类型的枚举」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn Rust Coding 课中编写并运行代码吗?

能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义和使用结构体
  2. 用于自定义类型的枚举
  3. 强大的模式匹配
← 返回 Learn Rust Coding