Kształty a luźne tabele
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 42 z 80.
Masz teraz dwa sposoby pracy z tabelami rekordów: swobodny, którego zawsze używałeś w Lua, oraz zadeklarowane kształty. Warto zatrzymać się na chwilę i zobaczyć, co daje każdy z nich.
Swobodna tabela przyjmuje wszystko. Ta elastyczność ma swoją cenę: literówka w polu (user.nmae) sprawia, że po cichu otrzymujesz nil; pominięcie pola powoduje, że błąd ujawnia się dużo później — w czasie działania programu, w kodzie, który jako pierwszy natrafi na brakujące pole:
local user = {name = "Ana", age = 20}
print(user.nmae) -- tabela bez ścisłej kontroli: bez ostrzeżenia wypisuje nilZadeklaruj kształt, a te pomyłki przeniosą się z czasu działania programu na etap edycji. Kontroler zgłosi literówkę w chwili, gdy ją wpiszesz, edytor może podpowiadać nazwy pól, a deklaracja type pełni również funkcję dokumentacji zawartości tabeli:
type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ błąd typu: nie znaleziono klucza 'nmae' w UserJeśli znasz TypeScript, pamiętaj, że Luau nie ma słowa kluczowego interface: type obsługuje wszystkie kształty. Nie ma też „łączenia deklaracji”: zadeklarowanie dwóch typów o tej samej nazwie w tym samym zakresie jest błędem, więc każdy kształt ma dokładnie jedną definicję.
Kształty w Luau są strukturalne: każda tabela z właściwymi polami o właściwych typach pasuje, niezależnie od tego, gdzie i jak została utworzona. Swobodne tabele również mają swoje zastosowanie: krótkie skrypty i naprawdę dynamiczne dane nie wymagają zadeklarowanego kształtu. Jednak w przypadku danych przekazywanych między funkcjami kształt pozwala wykryć pomyłki, gdy ich naprawa jest jeszcze tania.
Wyzwanie
ŁatwyPrzekształć luźną tablicę w tablicę o zadeklarowanym kształcie.
- Nad tablicą napisz
type Pet = {name: string, age: number}. - Dodaj adnotację do tablicy:
local pet: Pet = {name = "Biscuit", age = 3}. - Pod pierwszą instrukcją print dodaj
print(pet.age).
Naciśnij Uruchom kod: wynik pokazuje Biscuit i 3.
Spróbuj swoich sił
-- Swobodna tabela: nic nie sprawdza jej pól
local pet = {name = "Biscuit", age = 3}
print(pet.name)
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 tabelPoćwicz samodzielnie: Kompilator Luau online