מטא־מתודת __tostring
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 20 מתוך 54.
כשמדפיסים טבלה ב-Lua, בדרך כלל רואים משהו לא מועיל כמו table: 0x5f8a20, פשוט כתובת בזיכרון. מטאתודת __tostring מאפשרת לשנות את ההתנהגות הזאת על ידי הגדרה מדויקת של מה שיוצג כשהטבלה שלך מומרת למחרוזת.
שיטת המטא הזו שימושית במיוחד לניפוי שגיאות וליצירת פלט נקי יותר. כש-Lua צריכה להמיר את הטבלה שלך למחרוזת (למשל, כשמשתמשים ב-print()), היא בודקת אם יש לטבלה מטא־טבלה עם שדה __tostring. אם כן, Lua קוראת לפונקציה הזו ומשתמשת בערך ההחזרה שלה במקום בייצוג ברירת המחדל.
כך מממשים את זה:
local vector = {x = 3, y = 4}
local meta = {
__tostring = function(t)
return "Vector(" .. t.x .. ", " .. t.y .. ")"
end
}
setmetatable(vector, meta)
print(vector) -- פלט: Vector(3, 4)הפונקציה __tostring מקבלת את הטבלה כארגומנט וחייבת להחזיר מחרוזת. בדוגמה הזאת, היא בונה מחרוזת מעוצבת שמציגה את ערכי ה־x וה־y של הווקטור בפורמט קריא.
כך קל הרבה יותר לעבוד עם הקוד שלך. במקום לראות כתובות זיכרון מסתוריות במהלך ניפוי שגיאות, תקבל מידע משמעותי על מה שהטבלה שלך מכילה.
אתגר
קלכתבו פונקציה createPoint שמקבלת את הקואורדינטות x ו-y ומחזירה טבלת נקודה עם ייצוג מחרוזת מותאם אישית.
צרו טבלה עם השדות x ו-y, צרפו לה מטאטבלה עם מטאמֶתודת __tostring, והחזירו את התוצאה של המרת הטבלה למחרוזת באמצעות tostring().
לוגיקה:
- צרו טבלה עם המפתחות
xו-yשמוגדרים לקואורדינטות שסופקו - צרו מטאטבלה עם
__tostringשמחזירה מחרוזת בתבנית"Point(x, y)" - צרפו את המטאטבלה לטבלת הנקודה באמצעות
setmetatable() - החזירו
tostring(point)כדי לקבל את ייצוג המחרוזת המותאם אישית
פרמטרים:
x(מספר): קואורדינטת ה-x של הנקודהy(מספר): קואורדינטת ה-y של הנקודה
ערך מוחזר: ייצוג המחרוזת המותאם אישית של הנקודה בתבנית "Point(x, y)" (מחרוזת)
נסו בעצמכם
function createPoint(x, y)
-- כתבו כאן קוד
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאיםתרגלו בעצמכם: קומפיילר Lua אונליין