Dodawanie metod do kształtów
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 44 z 80.
Z rozdziału o OOP w Lua wiesz, że tabele mogą przechowywać funkcje, tak jak każdą inną wartość. Kształty również mogą opisywać te pola funkcyjne: dzięki temu kształt staje się małym kontraktem danych i zachowania.
Pole metody używa składni typu funkcji poznanej w rozdziale o funkcjach. Jej pierwszy parametr konwencjonalnie nazywa się self — to tabela, do której należy metoda — a kształt może nawet odwoływać się do samego siebie:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Aby zaimplementować kształt, zapisz funkcję w tym polu i przekaż jej parametr self:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Wywołanie metody oznacza samodzielne przekazanie tabeli jako self: greeter.greet(greeter). Za pośrednictwem self metoda odczytuje pola tej tabeli, na której ją wywołano.
Dwukrotne zapisywanie tabeli wydaje się niezgrabne, a znasz już rozwiązanie w Lua: dwukropek. W następnej lekcji połączymy składnię : z tymi typowanymi kształtami.
Wyzwanie
ŁatwyDodaj do kształtu prostokąta metodę obliczającą jego pole.
- Napisz
type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}. - Utwórz
local rect: Rectanglez szerokością4, wysokością6iarea = function(self: Rectangle): number, która zwracaself.width * self.height. - Wypisz
rect.area(rect), a następnierect.width.
Naciśnij Uruchom kod: wynik zawiera 24 i 4.
Spróbuj swoich sił
-- 1) typ Rectangle z polami width i height oraz metodą area
-- 2) lokalna zmienna rect: Rectangle (width 4, height 6) z zaimplementowaną metodą area
-- 3) wypisz pole powierzchni, a następnie szerokość
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