Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Dodaj do kształtu prostokąta metodę obliczającą jego pole.

  1. Napisz type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}.
  2. Utwórz local rect: Rectangle z szerokością 4, wysokością 6 i area = function(self: Rectangle): number, która zwraca self.width * self.height.
  3. Wypisz rect.area(rect), a następnie rect.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

Poćwicz samodzielnie: Kompilator Luau online