พารามิเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันที่รับชนิดข้อมูล
- โครงสร้างข้อมูล泛泛
- @TypeOf และการสะท้อนชนิดข้อมูล
- พารามิเตอร์ anytype