Sygnatury indeksowe
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 72 z 73.
Typy map, takie jak {[string]: number}, poznasz już w rozdziale o tabelach: sygnatura indeksu: każdy klucz typu string mapuje na wartość typu number. Sprawdzają się świetnie, gdy podczas pisania kodu nie znasz kluczy: liczniki, ustawienia, pamięci podręczne, wyniki — wszystko, co gromadzi się w czasie działania programu.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- dozwolony jest dowolny klucz typu string
counts["sword"] = 1
counts["potion"] += 1 -- wartości są sprawdzane jako liczbyPodczas pracy z mapami ważne są dwa fakty dotyczące działania programu. Po pierwsze, odczytanie klucza, któremu nigdy nie przypisano wartości, zwraca nil: klasyczny wzorzec zliczania obsługuje to za pomocą or, zamieniając „brak” na 0:
counts[item] = (counts[item] or 0) + 1Po drugie, pairs() iteruje po kluczach mapy w nieokreślonej kolejności: dwukrotne uruchomienie tego samego programu może odwiedzić klucze w innej kolejności. Gdy wynik musi być przewidywalny, zbierz klucze do tablicy, posortuj je za pomocą table.sort i zamiast tego iteruj po posortowanej tablicy:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endWyzwanie
ŁatwyPolicz łupy za pomocą typowanej mapy.
- Zadeklaruj
type Counts = {[string]: number}. - Napisz
countItems(items: {string}): Counts, która tworzy nową mapę typuCounts, zliczając, ile razy występuje każdy ciąg znaków (użyj wzorca(counts[item] or 0) + 1). - Utwórz
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}i zlicz elementy. - Wypisz po jednym wierszu
[name]: [count]dla każdego unikalnego przedmiotu, w kolejności alfabetycznej: zbierz klucze, posortuj je za pomocątable.sort, a następnie wypisz.
Oczekiwany wynik:
potion: 3
shield: 1
sword: 2Spróbuj swoich sił
-- Napisz kod tutaj
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts z użyciem (counts[item] or 0) + 1
-- 3) policz elementy tablicy loot z zadania
-- 4) zbierz klucze, posortuj je za pomocą table.sort i wypisz wiersze `{name}: {count}`
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ó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 luauowemu11Zaawansowane zagadnienia
Asercje typówStrażniki typów z typeofTyp neverBezpieczeństwo wartości nil w trybie ścisłymSygnatury indeksowePodsumowanie: precyzyjne dostrajanie 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