0Pricing
Zig Academy · 课时

枚举方法与底层整数

添加行为并控制表示方式。

枚举方法与底层整数 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。

枚举可以拥有行为

枚举是一种真正的类型,因此可以包含方法。您可以在枚举主体中、紧挨着各个值名称的位置声明函数。

枚举上的方法

在枚举内部编写函数,并将 self 作为第一个参数。它的工作方式与结构体上的方法完全相同。

const Color = enum { red, green, fn isRed(self: Color) bool { return self == .red; } };

调用枚举方法

您可以对一个值使用点语法调用方法。该值会成为self,因此方法知道调用它的是哪个变体。

const ok = c.isRed();

每个枚举都有整数底层表示

在底层,每个枚举值都会映射到一个整数。Zig 会选择能够容纳所有值的较小底层整数类型。

默认编号从零开始

默认情况下,第一个值为 0,之后每个值递增 1。因此 red 是 0,green 是 1,依照顺序依次类推。

const Color = enum { red, green, blue }; // 0, 1, 2

选择底层类型

您可以在括号中指定底层整数类型,例如 enum(u8)。这会固定确切的位宽,并且会影响布局和互操作性。

const Code = enum(u8) { a, b, c };

设置显式值

使用 = 为某个值指定特定数字。当整数必须与协议或硬件寄存器匹配时,这非常有用。

const Status = enum(u8) { ok = 0, busy = 1, err = 255 };

枚举转整数

使用 @intFromEnum 将枚举值转换为其数字。这会得到可发送或存储的底层整数。

const n = @intFromEnum(Status.err); // 255

整数转枚举

使用 @enumFromInt 反向转换,将数字转换回您所需类型的枚举值。

const s: Status = @enumFromInt(1);

谨慎进行转换

@enumFromInt 假定该数字是有效变体。在安全构建中,错误值会被捕获;否则就需要由您负责验证。

将方法与标签结合

将这两个想法结合起来:为布局选择底层类型,为协议设置值,并添加方法,使枚举保持自包含。

快速检查

您有一个 Status 枚举值,并需要它的底层数字。应该使用哪个内置函数?

回顾

您使用 self 为枚举添加了方法,选择了 enum(u8) 这样的底层整数,设置了显式值,并使用 @intFromEnum 和 @enumFromInt 进行了双向转换。🔢

常见问题解答

「枚举方法与底层整数」课时是免费的吗?

是的 — 「枚举方法与底层整数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。

「枚举方法与底层整数」这节课中我会学到什么?

添加行为并控制表示方式。 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Zig Academy 需要有经验吗?

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

「枚举方法与底层整数」课时需要多长时间?

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

我能在这节 Zig Academy 课中编写并运行代码吗?

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

此课程中的所有课时

  1. 使用枚举表示固定值集合
  2. 容纳多种类型之一的联合类型
  3. 带标签的联合类型与 switch
  4. 枚举方法与底层整数
← 返回 Zig Academy