使用 @typeInfo 反射字段
在编译时检查类型的结构
使用 @typeInfo 反射字段 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Look Inside Any Type
Zig lets your code examine its own types while it compiles. The built-in @typeInfo hands you the full structure of a type as data. 🔎
It Returns a Type.Info Value
@typeInfo takes a type and returns a std.builtin.Type value. That value is a tagged union describing exactly what kind of type you passed.
const info = @typeInfo(u32);The Tag Says What Kind It Is
The union tag tells you the category: a struct, an int, a pointer, and so on. You switch on it to react to each kind of type.
switch (@typeInfo(T)) {
.Struct => {},
else => {},
}Reach the Struct Payload
When the type is a struct, the .Struct variant carries a payload describing its fields, declarations, and layout.
const s = @typeInfo(Point).Struct;Fields Live in an Array
The struct payload has a fields array. Each entry is a StructField holding one field's name, type, and other details.
const fields = @typeInfo(Point).Struct.fields;Read a Field's Name and Type
Each StructField exposes a name string and a type. Both are compile-time values you can print or branch on.
const f = @typeInfo(Point).Struct.fields[0];
const n = f.name;Walk Fields with inline for
Because the field list is comptime, you iterate it with inline for. The loop unrolls, giving each field its own concrete code.
inline for (@typeInfo(T).Struct.fields) |field| {
_ = field.name;
}Inspect Integer Types Too
For an int, the .Int variant reveals its signedness and bit width, so you can adapt logic to the exact number type.
const i = @typeInfo(i16).Int;
const bits = i.bits;Enums Expose Their Members
The .Enum variant lists every enum field with its name and integer value, letting you generate code per option.
const e = @typeInfo(Color).Enum;
const fields = e.fields;Pointers Reveal Their Target
For pointers the .Pointer variant tells you the child type, size kind, and whether it is const, so you can unwrap layers.
const p = @typeInfo(*u8).Pointer;
const child = p.child;This Powers Real Libraries
Reflection drives Zig's own JSON and formatting code: they read fields with @typeInfo and handle any struct you give them. ✨
Quick Check
You want the list of a struct's fields at compile time. Which expression gives it to you?
Recap
@typeInfo turns a type into data: switch on its tag, then read fields, bits, or members and loop them with inline for. 🎯
常见问题解答
「使用 @typeInfo 反射字段」课时是免费的吗?
是的 — 「使用 @typeInfo 反射字段」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。
「使用 @typeInfo 反射字段」这节课中我会学到什么?
在编译时检查类型的结构 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Zig Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 @typeInfo 反射字段」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Zig Academy 课中编写并运行代码吗?
能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 @typeInfo 反射字段
- 使用 @Type 构建类型
- 编译时验证与 @compileError
- 使用 comptime 生成代码