Dodawanie metod do kształtów
Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 42 z 73.
Z rozdziału o OOP w Lua wiesz, że tabele mogą przechowywać funkcje, tak jak każdą inną wartość. Kształty mogą opisywać również te pola funkcyjne: zmieniając kształt w niewielki kontrakt danych i zachowania.
Pole metody używa składni typu funkcji poznanej w rozdziale o funkcjach. Jej pierwszy parametr zgodnie z konwencją nazywa się self i oznacza tabelę, do której należy metoda. Kształt może nawet odwoływać się do samego siebie:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Aby zaimplementować kształt, umieść funkcję w 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 tej metody oznacza samodzielne przekazanie tabeli jako self: greeter.greet(greeter). Za pośrednictwem self metoda odczytuje pola tabeli, na której została wywołana.
Dwukrotne zapisywanie tabeli wydaje się niezgrabne, a znasz już rozwiązanie Lua: dwukropek. W następnej lekcji połączymy składnię : z tymi typowanymi kształtami.
Wyzwanie
ŁatwyUtwórz alias typu o nazwie Rectangle z:
widthtypunumberheighttypunumberarea: metodą(self: Rectangle) -> number, która zwracawidth * heightperimeter: metodą(self: Rectangle) -> number, która zwraca2 * (width + height)
Utwórz zmienną rect typu Rectangle o szerokości 4 i wysokości 6, implementując obie metody (pamiętaj o parametrze self).
Wyświetl, każdą wartość w osobnym wierszu (wywołaj metody za pomocą składni kropkowej, przekazując rect jako self):
- pole prostokąta
- obwód prostokąta
- szerokość prostokąta
Spróbuj swoich sił
-- Napisz tutaj kod
-- 1) zdefiniuj typ Rectangle z dwoma polami liczbowymi i dwiema metodami
-- 2) utwórz rect (width 4, height 6), implementując obie metody
-- 3) wypisz area, perimeter i width
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 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