Tablice generyczne
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 60 z 73.
Typy generyczne stają się naprawdę przydatne, gdy pojawiają się tablice. Już teraz zapisujesz tablice typowane jako {number} lub {string}. W funkcji generycznej typ elementu może być po prostu T, a {T} oznacza „tablicę dowolnego typu, którym okaże się T”.
Oto klasyczny przykład: pobieranie pierwszego elementu dowolnej tablicy:
local function first<T>(items: {T}): T?
return items[1]
endPrzekaż {string}, a weryfikator typów wywnioskuje T = string, więc wynikiem będzie ciąg znaków. Przekaż {number}, a wynikiem będzie liczba. Jedna funkcja zastępuje całą rodzinę kopii dla poszczególnych typów.
Zwróć uwagę na typ zwracany: to T?, a nie T. Tablica może być pusta, a wtedy items[1] ma wartość nil: poznany wcześniej typ opcjonalny uczciwie to sygnalizuje: „T albo nil”. Weryfikator typów podpowie wywołującym, by obsłużyli przypadek nil przed użyciem wyniku — właśnie tego rodzaju błędy chcesz wykrywać za pomocą języka typowanego.
Wyzwanie
ŁatwyUtwórz funkcję generyczną o nazwie first, która:
- deklaruje parametr typu
T - przyjmuje jeden parametr o nazwie
itemstypu{T} - zwraca pierwszy element, z typem zwracanym
T?(dla pustej tablicy jest tonil)
Utwórz następujące tablice o określonych typach:
fruitstypu{string}z elementami"apple","banana","cherry"scorestypu{number}z elementami10,20,30,40flagstypu{boolean}z elementamifalse,trueemptytypu{string}, bez elementów
Wypisz wynik wywołania first dla każdej tablicy, w tej kolejności, każdy w osobnym wierszu.
Spróbuj swoich sił
-- Napisz kod tutaj
-- 1) zdefiniuj first<T>(items: {T}): T?, zwracającą items[1]
-- 2) utwórz fruits: {string}, scores: {number}, flags: {boolean},
-- oraz pustą tablicę {string}
-- 3) wypisz first(...) dla każdej tablicy, w tej kolejności
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 mapy6Typowanie kształtów tabel
Adnotacje kształtów w miejscuAliasy typów dla kształtówWłaściwości opcjonalneKształty a luźne tabeleRozszerzanie kształtówDodawanie metod do kształtówSelf i metody z dwukropkiemPodsumowanie: definiowanie kształtów tabel9Typy generyczne: pierwsze spojrzenie
Problem, który rozwiązują typy generyczneGeneryczna funkcja identycznościowaKorzystanie z funkcji generycznejTablice generyczneGeneryczne aliasy typówPodsumowanie: funkcje generycznePoćwicz samodzielnie: Kompilator Luau online