用于自定义类型的枚举
使用枚举定义可取多个变体之一的类型,这些变体通常还会携带关联数据。
用于自定义类型的枚举 是 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 反馈 — 无需本地设置。