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ę argumentemOdwrotną 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
endselect("#", ...) 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.
Wyzwanie
ŁatwyUtwórz typowaną tablicę scores: {number} zawierającą 85, 92 i 78.
- Wypisz wszystkie wyniki w jednym wierszu za pomocą
table.unpack. - Wypisz najwyższy wynik za pomocą
math.maxitable.unpack. - Zdefiniuj
local function sum(...: number): number, która sumuje wszystkie argumenty za pomocąselect("#", ...)iselect(i, ...), a następnie wypiszsum(table.unpack(scores)). - 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)
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Wprowadzenie do Luau
1Pierwsze kroki z Luau
Czym jest Luau?Dlaczego warto używać Luau?Twój pierwszy kod w LuauSprawdzanie typów i tryby błędówPodsumowanie: Wprowadzenie do Luau4Praca z funkcjami
Typowanie parametrów i wartości zwracanychTypowanie funkcji anonimowychFunkcje niczego nie zwracająceParametry opcjonalneDomyślne wartości parametrówFunkcje wariadyczneDefiniowanie typów funkcjiPodsumowanie: funkcje z typami2Typy podstawowe
Typy podstawowe: num, str, boolTyp „any”: furtka awaryjnaTyp „unknown”Typy Nil i opcjonalneInferencja typów w praktyceJawne adnotacje typówPowtórka: ćwiczenie typów podstawowych5Aliasy, typy sumy i przekroju
Aliasy typów dla typów prostychTypy sumyPraca z typami sumyTypy literałoweTypy przekrojuŁączenie aliasów typówPodsumowanie: zaawansowane kombinacje typów3Typowane tabele: tablice i mapy
Tablice typowaneDodawanie i odczytywanie elementówCzym jest typ mapy?Deklarowanie map i dostęp do nichIterowanie po tabelachTabele o mieszanej strukturzeWielowymiarowe tablice typowanetable.unpack i varargsPodsumowanie: tablice i mapyPoćwicz samodzielnie: Kompilator Luau online