Menu
CoddyTech

שימוש בפונקציה גנרית

חלק מהיחידה מבוא ל-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: הערך עבר דרך הפונקציה הגנרית בלי שום שינוי.

challenge icon

אתגר

קל

תן לבודק להסיק את T בכל קריאה.

  1. מתחת לפונקציה, אחסן את identity("Oslo") במשתנה local city ואת identity(42) במשתנה local floors, ללא הערות טיפוס.
  2. הדפס את typeof(city), ואז את typeof(floors).

לחץ על הרצת קוד: הפלט מציג string ו-number.

נסו בעצמכם

-- הפונקציה הגנרית identity מהשיעור הקודם
local function identity<T>(value: T): T
    return value
end

-- 1) city ו־floors מקריאות ל־identity, ללא הערות טיפוס
-- 2) הדפיסו את typeof של כל אחד מהם

כל השיעורים ביחידה מבוא ל-Luau

תרגלו בעצמכם: קומפיילר Luau אונליין