טיפוסי חיתוך
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 34 מתוך 73.
איחוד מציין שערך הוא מסוג אחד או מסוג אחר. טיפוסי חיתוך פועלים בכיוון ההפוך: האמפרסנד & משלב מבני טבלאות לטיפוס שיש לו את כל השדות של כל חלק:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- ל-Person חייבים להיות שני השדות
local user: Person = {
name = "Alice",
age = 25,
}אם משמיטים את age, הבודק מתלונן: חיתוך הוא "וגם", ולא בחירה בין אפשרויות. כך אפשר לבנות מבנים גדולים מחלקים קטנים שניתנים לשימוש חוזר: מגדירים טיפוסים ממוקדים לעניינים נפרדים, ואז מחברים אותם לפי הצורך:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
הערה חשובה לגבי Luau: יש לחתוך מבני טבלאות (וטיפוסי פונקציות), לא טיפוסים פרימיטיביים. ביטוי כמו number & string הוא חסר משמעות, כי שום ערך לא יכול להיות משניהם בו־זמנית. כשאתם רוצים "את המבנה הזה יחד עם המבנה ההוא", & הוא הכלי המתאים.
בזמן ריצה, כמובן, Person היא פשוט טבלת Lua רגילה: החיתוך קיים רק עבור הבודק.
אתגר
קלצור שני כינויי טיפוס: HasName עם שדה name: string, ו־HasAge עם שדה age: number.
צור את Person כחיתוך של HasName & HasAge.
צור את HasEmail עם שדה email: string, ואת Employee כחיתוך של שלושתם: HasName & HasAge & HasEmail.
הכרז על:
user: Personעם השם"Alice"והגיל25worker: Employeeעם השם"Bob", הגיל30והדוא״ל"bob@company.com"
צור את displayPerson(person: Person): string שמחזירה "Name: [name], Age: [age]", ואת displayEmployee(employee: Employee): string שמחזירה "Name: [name], Age: [age], Email: [email]".
הדפס את displayPerson(user) ואת displayEmployee(worker) בשורות נפרדות.
נסו בעצמכם
-- כתבו כאן קוד
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- הכריזו על user ועל worker, כתבו את שתי פונקציות התצוגה,
-- הדפיסו את displayPerson(user) ואת displayEmployee(worker)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין