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
endselect("#", ...) מחזירה כמה ארגומנטים התקבלו, ו-select(i, ...) מחזירה את הארגומנטים מהמיקום i ואילך: כשמשתמשים בה כביטוי שמחזיר ערך יחיד, היא למעשה מחזירה את הארגומנט ה-i.
שתי התכונות משתלבות זו בזו: sum(table.unpack(scores)) פורסת את המערך ישירות אל פונקציית הארגומנטים המשתנים: זו התשובה של Luau לדפוס קריאות הפונקציה עם פריסה, שאפשר למצוא בשפות אחרות. table.unpack קוראת את המערך בלי לשנות אותו.
אתגר
קלצרו מערך מטיפוס scores: {number} עם 85, 92 ו-78.
- הדפיסו את כל הציונים בשורה אחת באמצעות
table.unpack. - הדפיסו את הציון הגבוה ביותר באמצעות
math.maxו-table.unpack. - הגדירו
local function sum(...: number): numberשמחברת את כל הארגומנטים שלה באמצעותselect("#", ...)ו-select(i, ...), ואז הדפיסוsum(table.unpack(scores)). - הדפיסו
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)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין