การตรวจสอบฟิลด์ด้วย @typeInfo
ตรวจสอบโครงสร้างของชนิดข้อมูลขณะคอมไพล์
การตรวจสอบฟิลด์ด้วย @typeInfo เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
ดูภายในชนิดใดก็ได้
Zig อนุญาตให้โค้ดตรวจสอบชนิดของตัวเองขณะคอมไพล์ บิวท์อิน @typeInfo จะมอบโครงสร้างทั้งหมดของชนิดนั้นในรูปข้อมูลให้คุณ 🔎
ส่งคืนค่า Type.Info
@typeInfo รับชนิดหนึ่งชนิดและส่งคืนค่า std.builtin.Type ค่านั้นเป็น tagged union ที่อธิบายอย่างชัดเจนว่าชนิดที่คุณส่งเข้าไปเป็นชนิดใด
const info = @typeInfo(u32);แท็กบอกว่าเป็นชนิดใด
แท็กของ union จะบอกหมวดหมู่ เช่น struct จำนวนเต็ม หรือตัวชี้ เป็นต้น คุณใช้ switch กับแท็กนี้เพื่อจัดการกับ ชนิดแต่ละแบบ
switch (@typeInfo(T)) {
.Struct => {},
else => {},
}เข้าถึงข้อมูลของ Struct
เมื่อชนิดนั้นเป็น struct ตัวแปร .Struct จะเก็บข้อมูลที่อธิบายฟิลด์ การประกาศ และรูปแบบการจัดวาง
const s = @typeInfo(Point).Struct;ฟิลด์อยู่ในอาร์เรย์
ข้อมูลของ struct มีอาร์เรย์ fields แต่ละรายการคือ StructField ซึ่งเก็บชื่อ ชนิด และรายละเอียดอื่น ๆ ของฟิลด์หนึ่งฟิลด์
const fields = @typeInfo(Point).Struct.fields;อ่านชื่อและชนิดของฟิลด์
StructField แต่ละรายการเปิดเผยสตริง name และชนิด ทั้งสองอย่างเป็นค่าขณะคอมไพล์ที่คุณนำไปพิมพ์หรือตรวจสอบเงื่อนไขได้
const f = @typeInfo(Point).Struct.fields[0];
const n = f.name;วนดูฟิลด์ด้วย inline for
เนื่องจากรายการฟิลด์เป็น comptime คุณจึงวนดูได้ด้วย inline for ลูปจะถูกคลี่ออก ทำให้แต่ละฟิลด์มีโค้ดที่เป็นรูปธรรมของตัวเอง
inline for (@typeInfo(T).Struct.fields) |field| {
_ = field.name;
}ตรวจสอบชนิดจำนวนเต็มด้วย
สำหรับจำนวนเต็ม ตัวแปร .Int จะแสดงว่าเป็น signed หรือ unsigned และมีความกว้างกี่บิต คุณจึงปรับตรรกะให้เหมาะกับชนิดตัวเลขที่แน่นอนได้
const i = @typeInfo(i16).Int;
const bits = i.bits;Enum เปิดเผยสมาชิกของมัน
ตัวแปร .Enum จะแสดงฟิลด์ enum ทุกตัวพร้อมชื่อและค่าจำนวนเต็ม ทำให้คุณสร้างโค้ดแยกตามแต่ละตัวเลือกได้
const e = @typeInfo(Color).Enum;
const fields = e.fields;ตัวชี้เปิดเผยชนิดเป้าหมาย
สำหรับตัวชี้ ตัวแปร .Pointer จะบอกชนิด child ขนาด ชนิดของขนาด และบอกว่าเป็น const หรือไม่ คุณจึงแกะชั้นต่าง ๆ ออกได้
const p = @typeInfo(*u8).Pointer;
const child = p.child;สิ่งนี้ขับเคลื่อนไลบรารีจริง
การสะท้อนข้อมูลขับเคลื่อนโค้ด JSON และการจัดรูปแบบของ Zig เอง โดยโค้ดเหล่านั้นอ่านฟิลด์ด้วย @typeInfo และจัดการกับ struct ใด ๆ ที่คุณส่งให้ ✨
ตรวจสอบอย่างรวดเร็ว
คุณต้องการรายการฟิลด์ของ struct ขณะคอมไพล์ นิพจน์ใดจะให้รายการนั้นแก่คุณ
ทบทวน
@typeInfo เปลี่ยนชนิดให้เป็นข้อมูล: ใช้ switch กับแท็กของมัน จากนั้นอ่านฟิลด์ บิต หรือสมาชิก แล้ววนดูด้วย inline for 🎯
คำถามที่พบบ่อย
บทเรียน “การตรวจสอบฟิลด์ด้วย @typeInfo” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจสอบฟิลด์ด้วย @typeInfo” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบฟิลด์ด้วย @typeInfo”
ตรวจสอบโครงสร้างของชนิดข้อมูลขณะคอมไพล์ คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การตรวจสอบฟิลด์ด้วย @typeInfo” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบฟิลด์ด้วย @typeInfo
- การสร้างชนิดข้อมูลด้วย @Type
- การตรวจสอบขณะคอมไพล์และ @compileError
- การสร้างโค้ดด้วย comptime