定义您的第一个枚举
创建简单的枚举类型。
定义您的第一个枚举 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 4 节课。
What Is an Enum?
枚举(enumeration)允许你通过列出可能的值(称为变体)来定义一个类型。该类型的值只能是这些变体中的其中一个。
当某事物具有一组固定的状态时,枚举非常有用,例如基数方向(东、南、西、北)或扑克牌的花色。
enum Direction {
North,
South,
East,
West,
}声明枚举
使用 enum 关键字、一个名称,以及花括号内以逗号分隔的变体列表来声明枚举。
按照惯例,枚举名称使用 PascalCase(例如 Direction),变体名称也使用这种形式(例如 North)。
enum TrafficLight {
Red,
Yellow,
Green,
}创建枚举值
要构建一个值,请先写枚举名称,接着写两个冒号 ::,最后写变体。
例如,Direction::North 会创建一个 Direction 类型的值。:: 用于告诉 Rust 该变体属于哪个枚举。
enum Direction {
North,
South,
East,
West,
}
fn main() {
let heading = Direction::East;
println!("Created a direction value!");
}枚举是类型
定义后,枚举就是一种真正的类型,就像 i32 或 bool 一样。您可以将它的值存储在变量中,也可以将它们传递给函数。
接收 Direction 的函数会接受它的任意变体,但不会接受其他内容。
enum Direction {
North,
South,
}
fn describe(d: Direction) {
println!("Got a direction");
}
fn main() {
describe(Direction::North);
}为什么不直接使用数字?
您可以用 0、1 和 2 表示交通灯,但这样无法阻止您意外使用 7。
枚举让无效状态变得不可能:编译器保证该值始终是列出的某个变体。这样更安全,也更容易阅读。
派生 Debug 以进行打印
默认情况下,Rust 不知道如何打印枚举。在枚举上方添加 #[derive(Debug)] 后,就可以使用 {:?} 格式化器打印它。
在学习过程中,这对于快速调试非常有用。
#[derive(Debug)]
enum Direction {
North,
South,
}
fn main() {
let d = Direction::South;
println!("{:?}", d);
}比较枚举值
添加 #[derive(PartialEq)],即可使用 == 比较变体。
这对于简单检查很方便,不过对于更丰富的行为,match 表达式(即将介绍)通常是更好的工具。
#[derive(PartialEq)]
enum Light {
Red,
Green,
}
fn main() {
let l = Light::Red;
if l == Light::Red {
println!("Stop!");
}
}允许使用多个变体
枚举可以拥有任意数量的变体。它们都属于同一种类型。
将相关状态列在一起可以让代码更有条理,并让所有可能的选项一目了然。
enum Suit {
Hearts,
Diamonds,
Clubs,
Spades,
}标准库中的枚举
Rust 自己的标准库到处都在使用枚举。其中两个著名的枚举是 Option(可能存在也可能不存在的值)和 Result(成功或错误)。
现在学习枚举,有助于您稍后理解这些核心类型。
// Option is an enum in std:
// enum Option<T> {
// Some(T),
// None,
// }复制简单枚举
不携带数据的枚举变体可以派生 Clone 和 Copy。这样,值会自动复制,而不是被移动。
这会让小型状态枚举表现得像整数这样的简单值。
#[derive(Clone, Copy)]
enum Coin {
Heads,
Tails,
}
fn main() {
let a = Coin::Heads;
let b = a; // a is still usable
}整合运用
下面是一个完整的程序:定义枚举、创建值,并使用 Debug 打印它。
运行程序,并尝试将 Green 更改为另一个变体,观察输出如何更新。
#[derive(Debug)]
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
let current = TrafficLight::Green;
println!("Light is {:?}", current);
}快速检查
测试您对枚举基础知识的理解。
回顾
您学会了:enum 关键字可以定义一种类型,该类型由固定列表中的变体组成。
您可以使用 EnumName::Variant 创建值,还可以派生 Debug、PartialEq 或 Copy,以便打印、比较和复制这些值。接下来,您将学习如何使用 match 对每个变体作出响应。
用 AI 导师学习 Rust — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 39
- 课程
- 144
常见问题解答
「定义您的第一个枚举」课时是免费的吗?
是的 — 「定义您的第一个枚举」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 4 节课。
「定义您的第一个枚举」这节课中我会学到什么?
创建简单的枚举类型。 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn Rust Coding 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「定义您的第一个枚举」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn Rust Coding 课中编写并运行代码吗?
能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。