הקפאת טבלאות קבועות
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 59 מתוך 80.
לטבלת קבועים יש חולשה אחת: היא עדיין טבלה רגילה. כל קוד, בכל מקום, יכול לכתוב UserRole.Admin = 99, וה״קבועים״ שלך מפסיקים בשקט להיות קבועים.
Luau סוגרת את הפער באמצעות table.freeze. הקפאה הופכת טבלה לקריאה בלבד בזמן ריצה: כל ניסיון להוסיף, לשנות או להסיר שדה מעלה שגיאה. הנוהג המקובל הוא להקפיא את הטבלה במקום שבו היא נבנית: table.freeze מחזירה את אותה הטבלה, מוכנה להשמה:
local Color = table.freeze({
Red = 1,
Green = 2,
Blue = 3,
})
print(Color.Red) -- 1: הקריאה פועלת כרגיל
Color.Gold = 4 -- ✗ שגיאה: ניסיון לשנות טבלה לקריאה בלבדבניגוד לכל מה שנלמד בקורס עד כה, זוהי הגנה בזמן ריצה: שגיאה אמיתית ברגע שפעולת הכתיבה מתבצעת, ולא אזהרה בזמן העריכה. היא מגינה אפילו מפני קוד שבודק הטיפוסים מעולם לא ראה.
שתי פונקציות נלוות שכדאי להכיר: table.isfrozen(t) מחזירה אם הטבלה מוקפאת, וההקפאה היא שטחית: טבלאות מקוננות נשארות ניתנות לשינוי, אלא אם מקפיאים גם אותן. אי אפשר גם לבטל את ההקפאה: מרגע שטבלה הוקפאה, היא נשארת מוקפאת.
טבלת קבועים מוקפאת יחד עם איחוד של ערכים מילוליים לפרמטרים יוצרים את ה-enum המלא של Luau: ערכים בעלי שמות בזמן ריצה שאיש אינו יכול לשנות, ובדיקת טיפוסים בזמן עריכה בכל מקום שבו משתמשים בהם.
אתגר
קלצרו טבלה קבועה שאי אפשר לשנות.
- צרו
local Size = table.freeze({Small = 1, Medium = 2, Large = 3}). - הדפיסו את
Size.Largeואתtable.isfrozen(Size). - שמרו את
pcall(function() Size.Huge = 4 end)בתוךlocal okוהדפיסו אתok.
לחצו על הרצת קוד: הפלט מציג 3, true ו-false.
נסו בעצמכם
-- 1) local Size = table.freeze({...})
-- 2) הדפס את Size.Large ואת table.isfrozen(Size)
-- 3) שמור ב-ok את מה ש-pcall מחזירה עבור ניסיון הכתיבה האסור, והדפס אותו
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים8Enums בדרך של Luau
תבנית ה-Enum ב-LuauEnums מספריים באמצעות טבלאותEnums של מחרוזות כאיחודיםשימוש ב-Enums של איחודי ערכים מילולייםהקפאת טבלאות קבועותסיכום: Enums בדרך של Luau3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין