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