Korzystanie z funkcji generycznej
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 59 z 73.
Nigdy nie informujesz identity, czym jest T: sprawdzarka ustala to samodzielnie. To jest wnioskowanie o typie: przy każdym wywołaniu Luau analizuje argument i ustala T:
local word = identity("Luau") -- T wywnioskowane jako string
local count = identity(12) -- T wywnioskowane jako number
local flag = identity(false) -- T wywnioskowane jako booleanKażde wywołanie jest niezależne: T może być ciągiem znaków w jednym wierszu, a liczbą w następnym. Wywnioskowany wynik jest równie bezpieczny jak typ zapisany ręcznie: dla sprawdzarki word jest typu string, z pełnym autouzupełnianiem i sprawdzaniem błędów.
Ważna różnica w porównaniu z TypeScript: TS pozwala wymusić typ w miejscu wywołania za pomocą identity<number>(5). Luau nie obsługuje argumentów typu w miejscu wywołania. Ten wiersz nie jest specjalną składnią, więc Luau odczytuje nawiasy ostrokątne jako operatory porównania „mniejsze niż” i „większe niż”, a kod kończy się błędem. Jeśli chcesz jawnie określić typ, dodaj adnotację do zmiennej:
local count: number = identity(12)Możesz obserwować wnioskowanie w działaniu za pomocą znanego narzędzia: typeof zwraca nazwę typu wartości w czasie działania, więc print(typeof(identity(12))) wypisuje number: wartość przeszła przez funkcję generyczną bez żadnych zmian.
Wyzwanie
ŁatwyOgólna funkcja identity z poprzedniej lekcji jest już w edytorze. Wykorzystaj jej wnioskowanie o typie.
Utwórz trzy zmienne, pozwalając modułowi sprawdzającemu wywnioskować T (adnotacje nie są potrzebne):
word: wywołajidentityz"Luau"count: wywołajidentityz12flag: wywołajidentityzfalse
Wypisz poniższe wartości, każdą w osobnym wierszu:
word- wynik
typeof(word) count- wynik
typeof(count) flag- wynik
typeof(flag)
Spróbuj swoich sił
-- Generyczna funkcja identity z poprzedniej lekcji
local function identity<T>(value: T): T
return value
end
-- Napisz tutaj kod
-- 1) utwórz word, count i flag za pomocą wywołań identity (pozwól na wywnioskowanie T)
-- 2) wypisz każdą wartość, a po niej jej typeof
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