枚举方法与底层整数
添加行为并控制表示方式。
枚举方法与底层整数 是 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 反馈 — 无需本地设置。