Menu
Coddy logo textTech

table.unpack ו־Varargs

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

לפעמים יש לך ערכים במערך, אבל צריך אותם כערכים נפרדים: למשל, כדי להעביר כל איבר כארגומנט בפני עצמו. לשם כך נועדה table.unpack: היא מחזירה את כל איברי המערך כשהם פרוסים.

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (שורה אחת, שלושה ערכים)
print(math.max(table.unpack(scores))) -- 92 — כל איבר הפך לארגומנט

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

local function sum(...: number): number
    local total = 0
    for i = 1, select("#", ...) do
        total += select(i, ...)
    end
    return total
end

select("#", ...) מחזירה כמה ארגומנטים התקבלו, ו-select(i, ...) מחזירה את הארגומנטים מהמיקום i ואילך: כשמשתמשים בה כביטוי שמחזיר ערך יחיד, היא למעשה מחזירה את הארגומנט ה-i.

שתי התכונות משתלבות זו בזו: sum(table.unpack(scores)) פורסת את המערך ישירות אל פונקציית הארגומנטים המשתנים: זו התשובה של Luau לדפוס קריאות הפונקציה עם פריסה, שאפשר למצוא בשפות אחרות. table.unpack קוראת את המערך בלי לשנות אותו.

challenge icon

אתגר

קל

צרו מערך מטיפוס scores: {number} עם 85, 92 ו-78.

  1. הדפיסו את כל הציונים בשורה אחת באמצעות table.unpack.
  2. הדפיסו את הציון הגבוה ביותר באמצעות math.max ו-table.unpack.
  3. הגדירו local function sum(...: number): number שמחברת את כל הארגומנטים שלה באמצעות select("#", ...) ו-select(i, ...), ואז הדפיסו sum(table.unpack(scores)).
  4. הדפיסו sum(10, 20) כדי להראות שאותה פונקציה עובדת גם עם ארגומנטים רגילים.

נסו בעצמכם

-- כתבו כאן קוד
-- 1) הכריזו על scores: {number} = {85, 92, 78}
-- 2) הדפיסו print(table.unpack(scores)) ואת math.max של הערכים שנפרקו מתוך scores
-- 3) הגדירו את sum(...: number): number באמצעות select, והדפיסו את sum(table.unpack(scores))
-- 4) הדפיסו את sum(10, 20)
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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