חתימות אינדקס
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 72 מתוך 73.
כבר פגשת טיפוסי מפה כמו {[string]: number} בפרק הטבלאות: חתימת אינדקס: כל מפתח מסוג מחרוזת ממפה לערך מספרי. הם שימושיים במיוחד כשהמפתחות אינם ידועים בזמן כתיבת הקוד: מונים, הגדרות, מטמונים, ניקוד — כל דבר שנבנה בזמן הריצה.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- מותר להשתמש בכל מחרוזת כמפתח
counts["sword"] = 1
counts["potion"] += 1 -- הערכים נבדקים כמספריםחשוב לזכור שתי עובדות על זמן הריצה כשעובדים עם מפות. ראשית, קריאה של מפתח שמעולם לא הוגדר מחזירה nil: דפוס הספירה הקלאסי מטפל בכך בעזרת or, וממיר ערך "חסר" ל־0:
counts[item] = (counts[item] or 0) + 1שנית, pairs() עובר על מפתחות של מפה בסדר שאינו מובטח: הפעלה של אותה תוכנית פעמיים יכולה לעבור על המפתחות בסדר שונה. בכל פעם שהפלט חייב להיות צפוי, אסוף את המפתחות במערך, מיין אותם באמצעות table.sort, ועבור במקום זאת על המערך הממוין:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endאתגר
קלספרו את הפריטים שנפלו באמצעות מפה מטיפוס מוגדר.
- הכריזו על
type Counts = {[string]: number}. - כתבו
countItems(items: {string}): Countsשבונה מפה חדשה מסוגCountsוסופרת כמה פעמים כל מחרוזת מופיעה (השתמשו בתבנית(counts[item] or 0) + 1). - צרו
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}וספרו את הפריטים שבה. - הדפיסו שורה אחת בפורמט
[name]: [count]עבור כל פריט ייחודי, בסדר אלפביתי: אספו את המפתחות, הפעילו עליהםtable.sort, ואז הדפיסו.
הפלט הצפוי:
potion: 3
shield: 1
sword: 2נסו בעצמכם
-- כתבו כאן קוד
-- 1) type Counts = {[string]: number}
-- 2) הגדירו את countItems(items: {string}): Counts באמצעות (counts[item] or 0) + 1
-- 3) ספרו את הפריטים במערך loot מהמשימה
-- 4) אספו את המפתחות, מיינו אותם באמצעות table.sort, והדפיסו שורות בפורמט `{name}: {count}`
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים8Enums בדרך של Luau
תבנית ה-Enum ב-LuauEnums מספריים באמצעות טבלאותEnums של מחרוזות כאיחודיםשימוש ב-Enums של איחודי ערכים מילולייםהקפאת טבלאות קבועותסיכום: Enums בדרך של Luau11נושאים מתקדמים
הצהרות טיפוסשומרי טיפוס עם typeofהטיפוס neverבטיחות nil במצב strictחתימות אינדקססיכום: כוונון עדין של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין