Problem, który rozwiązują typy generyczne
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 57 z 73.
Wyobraź sobie, że potrzebujesz funkcji, która po prostu zwraca przekazaną jej wartość: funkcji identycznościowej. Przy znanych ci dotąd typach masz dwie możliwości i obie są kiepskie.
Opcja pierwsza: napisać osobną kopię dla każdego typu. Ciała funkcji są identyczne; różnią się tylko adnotacje:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endKażdy nowy typ oznacza kolejną kopię, a błąd poprawiony w jednej trzeba poprawić we wszystkich. To właśnie duplikacji chcesz uniknąć, pisząc funkcje.
Opcja druga: połączyć je w jedną funkcję z typem any:
local function echo(value: any): any
return value
endTeraz jedna funkcja obsługuje wszystko, ale ceną jest bezpieczeństwo typów. Gdy wywołasz echo("hello"), narzędzie sprawdzające nie wie już, że wynikiem jest ciąg znaków. Zna tylko typ any, więc autouzupełnianie przestaje działać, a błędy typów umykają: znika powiązanie między tym, co zostało przekazane, a tym, co jest zwracane.
Tak naprawdę potrzebujesz funkcji, która działa dla każdego typu i pamięta, jakiego typu użyto przy każdym wywołaniu. Właśnie to zapewniają typy generyczne i to im poświęcony jest ten rozdział.
Spróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
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