Korzystanie z funkcji generycznej
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 63 z 80.
Nigdy nie mówisz identity, czym jest T: sprawdzarka sama to ustala. To jest wnioskowanie o typach: przy każdym wywołaniu Luau sprawdza argument i ustala T:
local word = identity("Luau") -- T wywnioskowano jako string
local count = identity(12) -- T wywnioskowano jako number
local flag = identity(false) -- T wywnioskowano 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 ręcznie wpisana adnotacja: dla sprawdzarki word jest typu string, z pełnym autouzupełnianiem i sprawdzaniem błędów.
Jest jedna 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 typów w miejscu wywołania. Ten zapis nie jest specjalną składnią, więc Luau odczytuje nawiasy ostre jako operatory mniejsze niż/większe niż i kod się nie powiedzie. 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 wykonywania, więc print(typeof(identity(12))) wypisuje number: wartość przeszła przez funkcję generyczną bez żadnych zmian.
Wyzwanie
ŁatwyPozwól, aby system sprawdzania ustalił T przy każdym wywołaniu.
- Pod funkcją zapisz
identity("Oslo")wlocal cityiidentity(42)wlocal floors, bez adnotacji. - Wypisz
typeof(city), a następnietypeof(floors).
Naciśnij Uruchom kod: wynik pokazuje string i number.
Spróbuj swoich sił
-- Generyczna funkcja identity z poprzedniej lekcji
local function identity<T>(value: T): T
return value
end
-- 1) city i floors z wywołań identity, bez adnotacji
-- 2) wypisz typeof dla każdej z nich
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 niezwracające wartościParametry opcjonalneDomyślne wartości parametrówWartości domyślne dla typów BooleanFunkcje wariadyczneDefiniowanie typów funkcjiPodsumowanie: funkcje z typami2Podstawowe typy
Number, String i BooleanTyp 'any': wyjście awaryjneTyp 'unknown'Nil i typy opcjonalneInferencja typów w praktyceJawne adnotacje typówPowtórka: ćwiczenia z podstawowych typów5Aliasy, 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
Typowane tabliceDodawanie i odczytywanie elementówCzym jest typ mapy?Deklarowanie i uzyskiwanie dostępu do mapIterowanie po tabelachTabele o mieszanej strukturzeOdczytywanie siatkiTworzenie siatkitable.unpackPodsumowanie: 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