Self ומתודות עם נקודתיים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 45 מתוך 80.
הכתיבה של rect.area(rect) עובדת, אבל כבר למדת דרך טובה יותר ב־Lua OOP: נקודתיים. הקריאה rect:area() זהה לחלוטין: Lua מעבירה אוטומטית את הטבלה שלפני הנקודתיים כארגומנט הראשון, self.
הנקודתיים עוזרות גם במקום שבו מגדירים את הפונקציה. function account:deposit(amount) מכריזה עבורך על פרמטר ראשון מוסתר בשם self:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self מועבר במרומז
end
function account:getBalance(): number
return self.balance
endשימי לב שהמבנה מצהיר על self במפורש, deposit: (self: Account, amount: number) -> (), אף שהנקודתיים מסתירות אותו במימוש. הנקודתיים הן תחביר מקוצר; הפרמטר עדיין קיים, והטיפוס מציין אותו במפורש. מתודה שאינה מחזירה דבר מוגדרת עם ערך החזרה הריק -> ().
הקריאה פועלת לפי אותו כלל שכבר מוכר לך: account:deposit(250) זהה ל־account.deposit(account, 250). התנהגות זמן הריצה זהה לזו שבפרק ה־OOP שלך: Luau רק מוסיפה טיפוסים מעליה.
שימי לב ש־account עצמו נשאר ללא הצהרת טיפוס. הטיפוס Account מתאר את הטבלה המוגמרת, והטבלה תואמת לו רק לאחר ששתי המתודות מצורפות אליה; local account: Account = {owner = "Maya", balance = 1500} יגרום למצב המחמיר לדווח על המתודות החסרות.
אתגר
קלצרפו לחשבון שתי מתודות באמצעות תחביר הנקודתיים.
- מתחת לטבלה, הגדירו
function account:deposit(amount: number)שמוסיפה אתamountל-self.balance. - הגדירו
function account:getBalance(): numberשמחזירה אתself.balance. - הדפיסו את
account:getBalance(), קראו ל-account:deposit(120), ואז הדפיסו שוב אתaccount:getBalance().
לחצו על Run Code: הפלט מציג 300, ואז 420.
נסו בעצמכם
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Noah", balance = 300}
-- 1) function account:deposit(amount: number)
-- 2) function account:getBalance(): number
-- 3) הדפיסו את היתרה, הפקידו 120 והדפיסו אותה שוב
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלהתרגלו בעצמכם: קומפיילר Luau אונליין