Menu
Coddy logo textTech

table.unpack i varargs

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

Czasami masz wartości w tablicy, ale potrzebujesz ich jako oddzielnych wartości: na przykład, aby przekazać każdy element jako osobny argument. Do tego służy table.unpack: zwraca wszystkie elementy tablicy, rozdzielając je.

local scores: {number} = {85, 92, 78}
print(table.unpack(scores))     -- 85  92  78  (jeden wiersz, trzy wartości)
print(math.max(table.unpack(scores))) -- 92 — każdy element stał się argumentem

Odwrotną stroną są argumenty variadyczne: funkcja, która przyjmuje dowolną liczbę argumentów za pomocą .... Widziałeś już ... w Lua: Luau pozwala określić jego typ, więc każda przekazana wartość musi być zgodna:

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

select("#", ...) zwraca liczbę przekazanych argumentów, a select(i, ...) zwraca argumenty od pozycji i wzwyż: użyte jako pojedyncza wartość w wyrażeniu, oznacza w praktyce „i-ty argument”.

Te dwie funkcje dobrze ze sobą współpracują: sum(table.unpack(scores)) przekazuje elementy tablicy bezpośrednio do funkcji przyjmującej argumenty variadyczne — to odpowiednik wzorca wywołania z rozpakowaniem, spotykanego w innych językach. table.unpack odczytuje tablicę bez jej modyfikowania.

challenge icon

Wyzwanie

Łatwy

Utwórz typowaną tablicę scores: {number} zawierającą 85, 92 i 78.

  1. Wypisz wszystkie wyniki w jednym wierszu za pomocą table.unpack.
  2. Wypisz najwyższy wynik za pomocą math.max i table.unpack.
  3. Zdefiniuj local function sum(...: number): number, która sumuje wszystkie argumenty za pomocą select("#", ...) i select(i, ...), a następnie wypisz sum(table.unpack(scores)).
  4. Wypisz sum(10, 20), aby pokazać, że ta sama funkcja działa ze zwykłymi argumentami.

Spróbuj swoich sił

-- Napisz kod tutaj
-- 1) zadeklaruj scores: {number} = {85, 92, 78}
-- 2) wyświetl wynik print(table.unpack(scores)) oraz wartość math.max dla rozpakowanych elementów scores
-- 3) zdefiniuj sum(...: number): number za pomocą select, wyświetl wynik sum(table.unpack(scores))
-- 4) wyświetl wynik sum(10, 20)
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