Typy literałowe
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 33 z 73.
Typy takie jak string dopuszczają dowolny ciąg znaków, ale czasami sens ma tylko kilka konkretnych wartości. Typ literału wykorzystuje samą wartość jako typ:
local mode: "dark" = "dark" -- dozwolony jest tylko ciąg znaków "dark"
local locked: true = true -- dozwolona jest tylko wartość logiczna trueSame typy o pojedynczej wartości są jedynie ciekawostką. W połączeniu z uniami stają się jednym z najbardziej przydatnych narzędzi Luau: ściśle kontrolowanym zestawem dozwolonych wartości:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ błąd typu!Teraz literówka, taka jak "nort", lub nieprawidłowa wartość, taka jak "diagonal", zostanie wykryta podczas edycji. Przy zwykłym string taki kod przeszedłby bez problemu i spowodował błąd w czasie działania programu — o ile udałoby Ci się go zauważyć.
Typy literałów rozróżniają wielkość liter i muszą dokładnie się zgadzać: "North" nie pasuje do "north". Najczęściej używa się literałów tekstowych, ale literały logiczne oraz (w nowszych wersjach Luau) liczbowe działają tak samo. Ten wzorzec — unia literałów tekstowych — zastępuje również wyliczenia z innych języków, co zobaczysz w późniejszym rozdziale.
Wyzwanie
ŁatwyUtwórz trzy aliasy typów unii literałów:
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
Zadeklaruj, używając aliasów:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
Utwórz funkcję movePlayer(direction: Direction): string, która zwraca "Moving [direction]", oraz funkcję updateGameState(state: GameState): string, która zwraca "Game state: [state]".
Wypisz, każdą wartość w osobnym wierszu:
movePlayer(playerDirection)updateGameState(currentState)- wartość
selectedDifficulty
Spróbuj swoich sił
-- Napisz kod tutaj
-- zdefiniuj typy Direction / GameState / Difficulty jako unie literałów
-- zadeklaruj playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- wypisz trzy wyniki
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 mapyPoćwicz samodzielnie: Kompilator Luau online