Menu
CoddyTech

פונקציות עם מספר משתנה של ארגומנטים

חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 29 מתוך 80.

השתמשת ב־... של Lua (ארגומנטים משתנים) כדי לכתוב פונקציות שמקבלות כל מספר של ארגומנטים. Luau מאפשרת לך להגדיר טיפוס עבור הטיפוס של הארגומנטים המשתנים, כך שכל ארגומנט שמועבר נבדק:

function sum(...: number): number
    local total = 0
    for _, n in ipairs({...}) do
        total = total + n
    end
    return total
end

print(sum(1, 2))           -- 3
print(sum(1, 2, 3, 4, 5))  -- 15

...: number מצהיר שכל ארגומנט נוסף חייב להיות מספר: sum(1, "two") הופך לשגיאת טיפוס. כלי זמן הריצה הם אלה שכבר מוכרים לך:

  • {...} אוסף את הארגומנטים המשתנים לתוך מערך (כאן {number})
  • select("#", ...) סופר כמה ארגומנטים התקבלו
  • אפשר להעביר את ... ישירות לפונקציה אחרת, למשל math.max(...)

כמו ב־Lua, ... חייב להיות הפרמטר האחרון: פרמטרים רגילים (עם טיפוסים) מופיעים ראשונים, והחלק המשתנה אוסף את השאר:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

אתגר

קל

כתבו שתי פונקציות שמקבלות מספר כלשהו של ארגומנטים.

  1. כתבו local function sumAll(...: number): number שמחברת את הערכים ב־{...} באמצעות ipairs.
  2. כתבו local function joinWords(separator: string, ...: string): string שמחזירה את table.concat({...}, separator).
  3. הדפיסו את sumAll(5, 10, 15) ואת joinWords("-", "apple", "banana", "cherry").

לחצו על הרצת קוד: הפלט מציג 30 ו־apple-banana-cherry.

נסו בעצמכם

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) הדפס את שתי התוצאות

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

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