Menu
Coddy logo textTech

Funkcje wariadyczne

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

Używałeś już ... (varargs) w Lua, aby pisać funkcje przyjmujące dowolną liczbę argumentów. Luau pozwala typować varargs, dzięki czemu każdy przekazywany argument jest sprawdzany:

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 działające w czasie wykonywania są ci już znane:

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

Podobnie jak w Lua, ... musi być ostatnim parametrem: najpierw podaje się zwykłe (typowane) parametry, a zmienna liczba argumentów zbiera pozostałe:

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

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

Wyzwanie

Łatwy

Utwórz funkcję o nazwie sumAll, która przyjmuje dowolną liczbę argumentów typu number (...: number) i zwraca ich sumę jako number.

Utwórz funkcję o nazwie countValues, która przyjmuje dowolną liczbę argumentów typu string i zwraca ile ich przekazano, jako number: użyj select("#", ...).

Utwórz funkcję o nazwie joinWords, która przyjmuje wymagany argument separator: string, po którym następuje dowolna liczba argumentów typu string, i zwraca je połączone separatorem (użyj table.concat na {...}): typ zwracany string.

Wywołaj i wypisz, każde w osobnym wierszu:

  1. sumAll(5, 10, 15)
  2. sumAll(1, 2, 3, 4, 5)
  3. countValues("a", "b", "c", "d")
  4. joinWords("-", "apple", "banana", "cherry")
  5. joinWords(" | ", "red", "green", "blue")

Spróbuj swoich sił

-- Napisz tutaj kod
-- sumAll(...: number): number       -- przejdź pętlą przez {...}
-- countValues(...: string): number  -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- następnie wypisz pięć wyników
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online