0Pricing
Zig Academy · 课时

使用 @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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 @typeInfo 反射字段
  2. 使用 @Type 构建类型
  3. 编译时验证与 @compileError
  4. 使用 comptime 生成代码
← 返回 Zig Academy