0Pricing
Zig Academy · บทเรียน

พารามิเตอร์ anytype

รับอาร์กิวเมนต์ใดก็ได้ด้วยการพิมพ์แบบเป็ด

พารามิเตอร์ anytype เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยอมรับทุกสิ่งด้วย anytype

บางครั้งคุณอาจไม่ต้องการระบุชื่อชนิดข้อมูลเลย ให้ประกาศพารามิเตอร์เป็น anytype แล้ว Zig จะอนุมานชนิดข้อมูลจากอาร์กิวเมนต์ให้ 🦆

fn show(x: anytype) void {}

อนุมานชนิดข้อมูลตอนเรียกใช้

เมื่อใช้ anytype จะไม่มีพารามิเตอร์ชนิดข้อมูลนำหน้า อาร์กิวเมนต์ของผู้เรียกแต่ละรายจะกำหนดชนิดข้อมูลจริงสำหรับรูปแบบเฉพาะนั้น

show(42);
show(true);

นี่คือการพิมพ์แบบเป็ด

Zig ตรวจสอบเพียงว่าการดำเนินการในตัวฟังก์ชันใช้ได้กับอาร์กิวเมนต์ที่ส่งเข้ามาหรือไม่ หากมีรูปร่างที่ถูกต้อง ก็ใช้งานได้ นี่คือ การพิมพ์แบบเป็ด

เรียกดูชนิดข้อมูลเมื่อจำเป็น

ภายในฟังก์ชัน คุณยังสามารถขอชนิดข้อมูลได้ด้วย @TypeOf แล้วนำไปใช้กับตัวแปรภายในหรือค่าที่ส่งคืน

fn dup(x: anytype) @TypeOf(x) {
    return x;
}

เหมาะกับตัวช่วยแบบพิมพ์ผล

ฟังก์ชันที่ทำงานกับรูปร่างข้อมูลหลากหลายเหมาะกับ anytype มาก ฟังก์ชัน print ของ Zig เองก็รับทูเพิลอาร์กิวเมนต์แบบ anytype เพื่อจัดรูปแบบ

std.debug.print("{any}\n", .{x});

ข้อจำกัดมาจากตัวฟังก์ชัน

ไม่มีอินเทอร์เฟซที่ระบุอย่างชัดเจน หากคุณเรียกใช้ x.len ภายใน ก็จะคอมไพล์ได้เฉพาะอาร์กิวเมนต์ที่มีฟิลด์ len จริงเท่านั้น

fn size(x: anytype) usize {
    return x.len;
}

ข้อผิดพลาดเกิดแยกตามรูปแบบเฉพาะ

หากผู้เรียกส่งชนิดข้อมูลที่ตัวฟังก์ชันจัดการไม่ได้ Zig จะแจ้งข้อผิดพลาดที่ จุดเรียกใช้ นั้น พร้อมระบุชนิดข้อมูลที่ล้มเหลวอย่างชัดเจน

ตรวจสอบอินพุตด้วย comptime

เพื่อให้ข้อผิดพลาดชัดเจนขึ้น คุณสามารถตรวจสอบชนิดข้อมูลตั้งแต่ต้นด้วย @typeInfo และปฏิเสธรูปร่างข้อมูลที่ไม่ถูกต้องโดยใช้การตรวจสอบขณะคอมไพล์

anytype เทียบกับ comptime T: type

ใช้ comptime T: type เมื่อจำเป็นต้องระบุชื่อชนิดข้อมูลตั้งแต่ต้น และเลือกใช้ anytype เมื่อการอนุมานกับความยืดหยุ่นสำคัญกว่า

ยังไม่มีต้นทุนขณะรัน

เช่นเดียวกับเจเนริกทุกชนิดใน Zig ฟังก์ชัน anytype จะถูกปรับให้เฉพาะขณะคอมไพล์ ดังนั้นความยืดหยุ่นจากการอนุมานจึงไม่เสียต้นทุนเมื่อโปรแกรมทำงาน

ผสม anytype กับชนิดข้อมูลที่มีชื่อ

ฟังก์ชันสามารถผสมทั้งสองรูปแบบได้ นั่นคือมีพารามิเตอร์ anytype หนึ่งตัวสำหรับอินพุตที่ยืดหยุ่น ควบคู่กับพารามิเตอร์ที่ระบุชนิดข้อมูลสำหรับข้อมูลที่ตายตัว

fn join(sep: u8, x: anytype) void {
    _ = sep;
    _ = x;
}

ตรวจสอบอย่างรวดเร็ว

คุณเขียน fn show(x: anytype) แล้ว Zig จะตัดสินชนิดข้อมูลจริงของ x อย่างไร

สรุปทบทวน

คีย์เวิร์ด anytype ทำให้พารามิเตอร์รับอาร์กิวเมนต์ใด ๆ ได้ โดยอนุมานชนิดข้อมูลและตรวจสอบตัวฟังก์ชันแยกตามการเรียกใช้ นี่คือการพิมพ์แบบเป็ดที่ยืดหยุ่นของ Zig 🎯

คำถามที่พบบ่อย

บทเรียน “พารามิเตอร์ anytype” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พารามิเตอร์ anytype” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พารามิเตอร์ anytype”

รับอาร์กิวเมนต์ใดก็ได้ด้วยการพิมพ์แบบเป็ด คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “พารามิเตอร์ anytype” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟังก์ชันที่รับชนิดข้อมูล
  2. โครงสร้างข้อมูล泛泛
  3. @TypeOf และการสะท้อนชนิดข้อมูล
  4. พารามิเตอร์ anytype
← กลับไปที่ Zig Academy