Menu
CoddyTech

חתימות אינדקס

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

כבר פגשתם טיפוסי מפה כמו {[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
challenge icon

אתגר

קל

שמרו ניקוד לשחקנים ששמותיהם אינם ידועים לכם מראש.

  1. כתבו type Scores = {[string]: number} וצרו local scores: Scores = {}.
  2. הוסיפו נקודות: scores["mia"] = (scores["mia"] or 0) + 5, ואז עשו אותו הדבר עבור "leo" עם 3.
  3. הדפיסו את scores["mia"], את scores["leo"] ואת scores["zed"].

לחצו על הרצת קוד: הפלט מציג 5, 3 ו-nil.

נסו בעצמכם

-- 1) type Scores = {[string]: number}, ואז local scores: Scores = {}
-- 2) הוסיפו 5 נקודות ל-"mia" ו-3 ל-"leo"
-- 3) הדפיסו את mia, leo ו-zed

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

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