Menu
CoddyTech

טיפוסי חיתוך

חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 36 מתוך 80.

איחודים מציינים שערך הוא מסוג אחד או מסוג אחר. טיפוסי חיתוך מצביעים בכיוון ההפוך: האמפרסנד & משלב מבני טבלאות לטיפוס שיש בו את כל השדות של כל אחד מהחלקים:

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 רגילה: החיתוך קיים רק עבור הבודק.

challenge icon

אתגר

קל

שלב שתי צורות קטנות לצורה אחת.

  1. כתוב type HasName = {name: string}, type HasAge = {age: number} ו-type Person = HasName & HasAge.
  2. צור local user: Person = {name = "Omar", age = 31}.
  3. הדפס `Name: {user.name}, Age: {user.age}`.

לחץ על Run Code: הפלט מציג Name: Omar, Age: 31.

נסו בעצמכם

-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) הדפס את השורה עם השם והגיל

כל השיעורים ביחידה מבוא ל-Luau

תרגלו בעצמכם: קומפיילר Luau אונליין