Menu
CoddyTech

Funkcje wariadyczne

Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 29 z 80.

Używasz ... z Lua (varargs), aby pisać funkcje przyjmujące dowolną liczbę argumentów. Luau pozwala typować varargs, dzięki czemu sprawdzany jest typ każdego przekazanego argumentu:

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 deklaruje, że każdy dodatkowy argument musi być liczbą: sum(1, "two") powoduje błąd typu. Narzędzia używane w czasie działania są Ci już znane:

  • {...} zbiera varargs w tablicę (tutaj {number})
  • select("#", ...) zlicza, ile argumentów przekazano
  • ... można przekazać bezpośrednio do innej funkcji, np. math.max(...)

Podobnie jak w Lua, ... musi być ostatnim parametrem: zwykłe (typowane) parametry występują najpierw, a część wariadyczna zbiera pozostałe argumenty:

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

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

Wyzwanie

Łatwy

Napisz dwie funkcje, które przyjmują dowolną liczbę argumentów.

  1. Napisz local function sumAll(...: number): number, która sumuje {...} za pomocą ipairs.
  2. Napisz local function joinWords(separator: string, ...: string): string, która zwraca table.concat({...}, separator).
  3. Wypisz sumAll(5, 10, 15) i joinWords("-", "apple", "banana", "cherry").

Naciśnij Uruchom kod: wynik pokazuje 30 i apple-banana-cherry.

Spróbuj swoich sił

-- 1) sumAll(...: number): number
-- 2) joinWords(separator: string, ...: string): string
-- 3) wypisz oba wyniki

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online