שימוש בפונקציה גנרית
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 63 מתוך 80.
אף פעם לא אומרים ל־identity מהו T: הבודק מסיק זאת בעצמו. זהו הסקת טיפוסים: בכל מקום שבו קוראים לפונקציה, Luau בוחנת את הארגומנט ומסיקה את T:
local word = identity("Luau") -- הטיפוס של T מוסק כמחרוזת
local count = identity(12) -- הטיפוס של T מוסק כמספר
local flag = identity(false) -- הטיפוס של T מוסק כערך בוליאניכל קריאה עצמאית: T יכולה להיות מחרוזת בשורה אחת ומספר בשורה הבאה. התוצאה שהוסקה בטוחה בדיוק כמו הערת טיפוס שנכתבה ידנית: מבחינת הבודק, word הוא string, עם השלמה אוטומטית מלאה ובדיקת שגיאות.
הבדל חשוב אחד לעומת TypeScript: ב־TS אפשר לכפות את הטיפוס במקום הקריאה באמצעות identity<number>(5). ב־Luau אין ארגומנטים של טיפוס במקום הקריאה. השורה הזאת אינה תחביר מיוחד, ולכן Luau קוראת את הסוגריים הזוויתיים כהשוואות קטן מ־/גדול מ־ והקוד נכשל. כשרוצים לציין את הטיפוס במפורש, מוסיפים הערת טיפוס למשתנה במקום זאת:
local count: number = identity(12)אפשר לראות את ההסקה בפעולה בעזרת כלי מוכר: typeof מחזירה את שם הטיפוס של ערך בזמן ריצה, ולכן print(typeof(identity(12))) מדפיסה number: הערך עבר דרך הפונקציה הגנרית בלי שום שינוי.
אתגר
קלתן לבודק להסיק את T בכל קריאה.
- מתחת לפונקציה, אחסן את
identity("Oslo")במשתנהlocal cityואתidentity(42)במשתנהlocal floors, ללא הערות טיפוס. - הדפס את
typeof(city), ואז אתtypeof(floors).
לחץ על הרצת קוד: הפלט מציג string ו-number.
נסו בעצמכם
-- הפונקציה הגנרית identity מהשיעור הקודם
local function identity<T>(value: T): T
return value
end
-- 1) city ו־floors מקריאות ל־identity, ללא הערות טיפוס
-- 2) הדפיסו את typeof של כל אחד מהם
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלה9מבט ראשון על טיפוסים גנריים
הבעיה שטיפוסים גנריים פותריםפונקציית זהות גנריתשימוש בפונקציה גנריתמערכים גנרייםכינויי טיפוס גנרייםסיכום: פונקציות גנריותתרגלו בעצמכם: קומפיילר Luau אונליין