Używanie enumów opartych na unii literałów
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 58 z 80.
Unie literałów sprawdzają się szczególnie dobrze jako parametry funkcji. Określ typ parametru za pomocą unii, a weryfikator typów zagwarantuje, że funkcja będzie wywoływana wyłącznie z prawidłowym elementem:
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ błąd typu: to nie jest DirectionWewnątrz funkcji obsłuż wszystkie elementy wyczerpująco, używając łańcucha if/elseif. Ponieważ typ ogranicza dane wejściowe do czterech wartości, sprawdzenie trzech z nich i pozostawienie ostatniej gałęzi else obejmuje wszystkie możliwości:
local function describe(direction: Direction): string
if direction == "up" then
return "Going upward"
elseif direction == "down" then
return "Going downward"
elseif direction == "left" then
return "Turning left"
else
return "Turning right"
end
endJest tu jeden haczyk: ciągi znaków przychodzące z zewnątrz, na przykład z io.read(), są typowane jako zwykły string, ponieważ weryfikator nie może wiedzieć, co wpisze użytkownik. Operator rzutowania Luau :: rozwiązuje ten problem: value :: Type informuje weryfikator, by traktował wartość jako ten typ. Lekcja Asercje typów pod koniec tej sekcji omawia rzutowania w całości; na razie wystarczy jedna linijka:
local direction = io.read() :: DirectionRzutowanie to obietnica, a nie sprawdzenie — w czasie działania nic nie weryfikuje danych wejściowych. W kodzie produkcyjnym najpierw należałoby je zweryfikować; tutaj rzutowanie pozwala funkcjom z określonymi typami poprawnie przyjmować dane od użytkownika.
Wyzwanie
ŁatwyZamień kierunek wpisany przez gracza na akcję.
- Zapisz
type Direction = "up" | "down" | "left" | "right". - Zapisz funkcję
local function getAction(direction: Direction): string, która zwraca"Climb","Drop","Turn left"lub"Turn right". - Odczytaj
local direction = io.read() :: Directioni wyświetlgetAction(direction).
Naciśnij Run Code: po wprowadzeniu up na wyjściu pojawi się Climb.
Spróbuj swoich sił
-- 1) typ Direction
-- 2) getAction(direction: Direction): string
-- 3) local direction = io.read() :: Direction, a następnie wypisz akcję
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ów8Enumy po luauowemu
Wzorzec enumów w LuauNumeryczne enumy z tabelamiEnumy tekstowe jako unieUżywanie enumów opartych na unii literałówZamrażanie stałych tabelPodsumowanie: enumy po luauowemu3Typowane 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 mapyPoćwicz samodzielnie: Kompilator Luau online