การสร้างชนิดข้อมูลด้วย @Type
สร้างชนิดข้อมูลใหม่ด้วยโปรแกรม
การสร้างชนิดข้อมูลด้วย @Type เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
สิ่งที่ตรงข้ามกับ @typeInfo
หาก @typeInfo เปลี่ยนชนิดให้เป็นข้อมูล @Type ก็จะเปลี่ยนข้อมูลกลับเป็นชนิดจริง ทั้งสองอย่างทำให้คุณปรับรูปร่างชนิดขณะคอมไพล์ได้ 🛠️
ส่งค่า Type.Info ให้มัน
@Type รับค่า std.builtin.Type และสร้างชนิดจริงที่ค่านั้นอธิบายขึ้นมา คุณส่งคำอธิบายให้มัน แล้วมันจะส่งชนิดกลับมา
const T = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = 8 } });สร้างชนิดจำนวนเต็ม
ตัวอย่างด้านบนสร้าง u8 ขึ้นใหม่ทั้งหมด เปลี่ยน bits เป็น 16 แล้วคุณจะได้ u16 โดยทุกอย่างถูกตัดสินใจขณะโปรแกรมคอมไพล์
const U16 = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = 16 } });แปลงชนิดไปกลับ
การส่งชนิดข้อมูลผ่าน @typeInfo แล้วส่งต่อให้ @Type จะได้ชนิดข้อมูลเดิมกลับมา นี่พิสูจน์ว่าบิลด์อินทั้งสองเป็นฟังก์ชันผกผันกันอย่างสมบูรณ์
const Same = @Type(@typeInfo(u32));อธิบาย Struct ในรูปข้อมูล
หากต้องการสร้าง struct ให้กรอกข้อมูลลงในอาร์เรย์ StructField แต่ละฟิลด์ต้องมีชื่อ ชนิดข้อมูล การจัดแนว และพอยน์เตอร์ค่าเริ่มต้น
const f = std.builtin.Type.StructField;ประกอบข้อมูล Struct
ห่อฟิลด์ของคุณไว้ในข้อมูล .Struct พร้อมเลย์เอาต์และแฟล็ก is_tuple จากนั้นส่งข้อมูลทั้งหมดให้ @Type
const info = .{ .Struct = .{
.layout = .auto,
.fields = my_fields,
.decls = &.{},
.is_tuple = false,
} };สร้างชนิด Struct ใหม่
เรียกใช้ @Type กับข้อมูลนั้น แล้วคุณจะได้ชนิด struct ใหม่เอี่ยมที่สร้างตามตรรกะของคุณเอง แทนที่จะเขียนขึ้นด้วยมือ
const Generated = @Type(info);ค่าเริ่มต้นต้องใช้พอยน์เตอร์ comptime
default_value ของฟิลด์คือพอยน์เตอร์ const แบบเลือกมีค่าได้ซึ่งชี้ไปยังค่า หรือเป็น null เมื่อไม่มีค่าเริ่มต้น พอยน์เตอร์นี้ต้องเป็นค่าที่ทราบได้ใน comptime
const dv: ?*const anyopaque = &@as(u8, 0);สร้าง Enum และชนิดอื่น ๆ
เทคนิคเดียวกันนี้ใช้ได้กับชนิดอื่นนอกเหนือจาก struct ด้วย ข้อมูล .Enum ทำให้ @Type สังเคราะห์ชนิด enum จากรายการสมาชิกที่คำนวณได้
เหตุใดจึงต้องสร้างชนิดข้อมูล
ชนิดข้อมูลที่สร้างขึ้นช่วยขับเคลื่อนตัวแปลงข้อมูลและ ORM คุณจึงสร้างชนิดข้อมูลการตั้งค่าหรือแถวแบบ packed ได้ โดยอัตโนมัติ แทนการแก้ไขด้วยมือ ✨
ใช้คู่กับ Reflection
รูปแบบที่ทรงพลังที่สุดคืออ่านชนิดข้อมูลด้วย @typeInfo แปลงข้อมูล แล้วสร้างชนิดใหม่ด้วย @Type เช่น เพิ่มฟิลด์
ตรวจสอบอย่างรวดเร็ว
คุณมีค่า std.builtin.Type ที่อธิบาย struct อยู่ อะไรจะเปลี่ยนค่านี้ให้เป็นชนิดข้อมูลที่ใช้งานได้
ทบทวน
@Type สร้างชนิดข้อมูลจริงจากข้อมูล Type.Info ซึ่งเป็นฟังก์ชันผกผันของ @typeInfo ใช้ทั้งสองอย่างร่วมกันเพื่ออ่าน แปลง และสร้างชนิดข้อมูลขึ้นใหม่ 🎯
เรียนรู้ Zig ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การสร้างชนิดข้อมูลด้วย @Type” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างชนิดข้อมูลด้วย @Type” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างชนิดข้อมูลด้วย @Type”
สร้างชนิดข้อมูลใหม่ด้วยโปรแกรม คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างชนิดข้อมูลด้วย @Type” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม
ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบฟิลด์ด้วย @typeInfo
- การสร้างชนิดข้อมูลด้วย @Type
- การตรวจสอบขณะคอมไพล์และ @compileError
- การสร้างโค้ดด้วย comptime