הרחבת מבנים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 41 מתוך 73.
לעיתים קרובות, לצורות קשורות יש שדות משותפים. כל Admin הוא גם User; העתקת השדות המשותפים לשתי ההצהרות עלולה לגרום להן להתפצל.
פגשת את אופרטור החיתוך & כששילבת כינויים. הוא פועל בדיוק באותו אופן גם עבור צורות. A & B פירושו "מכיל את כל מה שיש ב-A וגם את כל מה שיש ב-B":
type User = {name: string, age: number}
type Admin = User & {level: number}
-- Admin דורש כעת: name, age וגם level
local root: Admin = {name = "Root", age = 35, level = 9}בעוד ש-TypeScript דורשת את מילת המפתח הנפרדת extends עבור ממשקים, ב-Luau אין צורך בשום דבר חדש: חיתוכים כבר עושים את העבודה. אפשר לשרשר כמה חלקים:
type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}אל תבלבלו בין & לבין |: איחוד A | B הוא צורה זו או זו, בעוד שחיתוך A & B חייב לקיים את שתיהן בו-זמנית. ומכיוון של-Admin יש את כל השדות של User, אפשר להעביר ערך מסוג Admin לכל מקום שבו מצפים ל-User.
אתגר
קלצרו את כינויי הטיפוס הבאים:
Employee:id(number),name(string),department(string)Manager: הרחבה שלEmployee(באמצעות&) עםteamSize(number)Contact:email(string)Developer: החיתוך שלEmployee,Contactו-{yearsExperience: number}
צרו:
- את
teamLeadמטיפוסManager: מזהה101, שם"Alice Johnson", מחלקה"Engineering", גודל צוות8 - את
devמטיפוסDeveloper: מזהה102, שם"Bob Smith", מחלקה"Engineering", דוא"ל"bob@company.com", שנות ניסיון5
צרו פונקציה בשם getManagerSummary שמקבלת Manager ומחזירה [name] manages [teamSize] people.
הדפיסו, כל אחד בשורה נפרדת:
- את התוצאה של
getManagerSummary(teamLead) [name] has [yearsExperience] years of experienceעבורdev- את המחלקה של
teamLead - את כתובת הדוא"ל של
dev
נסו בעצמכם
-- כתבו כאן קוד
-- 1) הגדירו את Employee, ואז את Manager / Contact / Developer באמצעות &
-- 2) צרו את teamLead ואת dev
-- 3) כתבו את getManagerSummary
-- 4) הדפיסו את ארבע השורות המבוקשות
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין