פונקציית זהות גנרית
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 62 מתוך 80.
כך נראית פונקציית הזהות כשהיא כתובה נכון, כפונקציה גנרית:
local function identity<T>(value: T): T
return value
endה־<T> אחרי שם הפונקציה מצהיר על פרמטר טיפוס: מציין מקום שמייצג „טיפוס כלשהו, שנקבע בכל קריאה”. בתוך החתימה משתמשים ב־T בדיוק כמו בטיפוס אמיתי: הפרמטר הוא T, והפונקציה מחזירה T.
השימוש באותו T עבור הקלט והפלט הוא כל העניין. הוא מקשר ביניהם. כשקוראים ל־identity("hello"), הבודק קובע T = string עבור אותה קריאה, ולכן התוצאה היא string. כשקוראים ל־identity(42), אז T = number, ולכן התוצאה היא number. גוף אחד, כל הטיפוסים, ושום דבר לא אובד.
T הוא רק שם מוסכם (קיצור של "Type"): גם <Item> או <Value> מתאימים. וכמו תמיד ב־Luau, סוגריים הזוויתיים קיימים רק עבור הבודק: בזמן ריצה זו פונקציית Lua רגילה function identity(value) return value end.
אתגר
קלכתבו פונקציה אחת שמחזירה כל ערך תוך שמירה על הטיפוס שלו.
- כתבו
local function identity<T>(value: T): Tשמחזירה אתvalue. - הכריזו על
local luckyNumber: number = identity(7)ועלlocal greeting: string = identity("Hello, Luau!"). - הדפיסו את
luckyNumber, ואז אתgreeting.
לחצו על הרצת קוד: הפלט מציג את 7 ואת Hello, Luau!.
נסו בעצמכם
-- 1) identity<T>(value: T): T
-- 2) luckyNumber ו־greeting מקריאות ל־identity
-- 3) להדפיס את שניהם
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלה9מבט ראשון על טיפוסים גנריים
הבעיה שטיפוסים גנריים פותריםפונקציית זהות גנריתשימוש בפונקציה גנריתמערכים גנרייםכינויי טיפוס גנרייםסיכום: פונקציות גנריותתרגלו בעצמכם: קומפיילר Luau אונליין