שימוש ב-Enums של איחודי ערכים מילוליים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 58 מתוך 80.
איחודים של ערכים מילוליים מוכיחים את ערכם כפרמטרים של פונקציות. מגדירים פרמטר באמצעות האיחוד, ובודק הטיפוסים מבטיח שהפונקציה תיקרא רק עם איבר תקף:
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ שגיאת טיפוס: אינו Directionבתוך הפונקציה, טפלו בכל האיברים באופן ממצה באמצעות שרשרת if/elseif. מכיוון שהטיפוס מגביל את הקלט לארבעה ערכים, בדיקה של שלושה מהם והסתמכות על else עבור הערך האחרון מכסה את כל האפשרויות:
local function describe(direction: Direction): string
if direction == "up" then
return "Going upward"
elseif direction == "down" then
return "Going downward"
elseif direction == "left" then
return "Turning left"
else
return "Turning right"
end
endיש כאן סיבוך קטן: מחרוזות שמגיעות מבחוץ, כמו io.read(), מקבלות את הטיפוס string פשוט, כי בודק הטיפוסים לא יכול לדעת מה המשתמש יקליד. אופרטור ההמרה של Luau, ::, פותר זאת: value :: Type אומר לבודק להתייחס לערך כאילו הוא מהטיפוס הזה. השיעור על הצהרות טיפוס לקראת סוף היחידה הזאת עוסק בהמרות לעומק; בינתיים, שורה אחת מספיקה:
local direction = io.read() :: Directionהמרה היא הבטחה, לא בדיקה — בזמן הריצה לא מאמתים את הקלט. בקוד שמיועד לשימוש אמיתי יש לאמת אותו תחילה; כאן ההמרה מאפשרת לפונקציות עם טיפוסים לקבל קלט מהמשתמש בצורה נקייה.
אתגר
קלהפוך כיוון שהשחקן הקליד לפעולה.
- כתוב
type Direction = "up" | "down" | "left" | "right". - כתוב
local function getAction(direction: Direction): stringשמחזירה"Climb","Drop","Turn left"או"Turn right". - קרא את
local direction = io.read() :: Directionוהדפס אתgetAction(direction).
לחץ על הרצת קוד: עם הקלט up, הפלט מציג Climb.
נסו בעצמכם
-- 1) טיפוס Direction
-- 2) getAction(direction: Direction): string
-- 3) local direction = io.read() :: Direction, ואז להדפיס את הפעולה
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים8Enums בדרך של Luau
תבנית ה-Enum ב-LuauEnums מספריים באמצעות טבלאותEnums של מחרוזות כאיחודיםשימוש ב-Enums של איחודי ערכים מילולייםהקפאת טבלאות קבועותסיכום: Enums בדרך של Luau3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין