Menu
Coddy logo textTech

setmetatable ו־getmetatable

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 17 מתוך 54.

עכשיו, כשאתם מבינים מהן מטא־טבלאות מבחינה רעיונית, הגיע הזמן ללמוד איך לעבוד איתן בפועל. Lua מספקת שתי פונקציות חיוניות לשם כך: setmetatable() כדי לשייך מטא־טבלה לטבלה, ו־getmetatable() כדי לאחזר אותה.

כדי לצרף מטא-טבלה לטבלה, משתמשים ב־setmetatable(). הפונקציה הזו מקבלת שני ארגומנטים: הטבלה שרוצים לשנות (הטבלה הראשית) ומטא-הטבלה שרוצים לצרף אליה:

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

בדוגמה הזו, myMetatable מחוברת כעת אל myTable. המטא-טבלה עצמה ריקה לעת עתה, אבל כך נוצר הקשר בין שתי הטבלאות. הפונקציה setmetatable() גם מחזירה את הטבלה הראשית, מה שמאפשר לשרשר את הפעולה אם צריך.

כדי לאחזר את טבלת המטא שמצורפת לטבלה, משתמשים ב-getmetatable():

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- פלט: true

הפונקציה הזאת מחזירה את טבלת המטא אם היא מחוברת, או nil אם אין למערך טבלת מטא. הדבר שימושי כשצריך לבדוק או לשנות את טבלת המטא של מערך לאחר שהוגדרה.

הבנת שתי הפונקציות האלה היא הבסיס לכל העבודה עם מטא־טבלאות ב-Lua. ברגע שתוכלו להצמיד מטא־טבלאות ולאחזר אותן, תהיו מוכנים להגדיר מטא־מתודות שמשנות את אופן ההתנהגות של הטבלאות שלכם.

challenge icon

אתגר

קל

כתבו פונקציה attachMetatable שמקבלת את mainTable ואת metaTable ומחזירה true אם המטא-טבלה צורפה בהצלחה.

השתמשו ב־setmetatable() כדי לצרף את המטא-טבלה לטבלה הראשית, ואז ודאו שהצירוף הצליח באמצעות getmetatable().

לוגיקה:

  • צרפו את metaTable אל mainTable באמצעות setmetatable()
  • קבלו את המטא-טבלה שצורפה באמצעות getmetatable()
  • השוו את המטא-טבלה שהתקבלה למטא-טבלה המקורית metaTable
  • החזירו true אם הן תואמות, ו־false אחרת

פרמטרים:

  • mainTable (table): הטבלה שאליה תצורף המטא-טבלה
  • metaTable (table): המטא-טבלה שיש לצרף

ערך מוחזר: true אם המטא-טבלה צורפה ואומתה בהצלחה, ו־false אחרת (בוליאני)

נסו בעצמכם

function attachMetatable(mainTable, metaTable)
    -- כתבו כאן קוד
end
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

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