Menu
Coddy logo textTech

Metametoda __tostring

Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 20 z 54.

Gdy wypisujesz tablicę w Lua, zazwyczaj widzisz coś mało przydatnego, na przykład table: 0x5f8a20 — tylko adres pamięci. Metametoda __tostring pozwala zmienić to zachowanie przez określenie, co dokładnie ma być wyświetlane, gdy tablica zostanie przekonwertowana na ciąg znaków.

Ten metametod jest szczególnie przydatny podczas debugowania i tworzenia bardziej przejrzystych danych wyjściowych. Gdy Lua musi przekonwertować twoją tablicę na ciąg znaków (na przykład podczas używania print()), sprawdza, czy tablica ma metatabelę z polem __tostring. Jeśli tak, Lua wywołuje tę funkcję i używa wartości, którą zwraca, zamiast domyślnej reprezentacji.

Oto jak to zaimplementować:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- Wynik: Vector(3, 4)

Funkcja __tostring otrzymuje tabelę jako argument i musi zwrócić ciąg znaków. W tym przykładzie tworzy sformatowany ciąg znaków, który przedstawia wartości x i y wektora w czytelny sposób.

Dzięki temu praca z kodem jest znacznie łatwiejsza. Zamiast widzieć podczas debugowania tajemnicze adresy pamięci, otrzymujesz przydatne informacje o zawartości tablicy.

challenge icon

Wyzwanie

Łatwy

Napisz funkcję createPoint, która przyjmuje współrzędne x i y i zwraca tabelę punktu z niestandardową reprezentacją tekstową.

Utwórz tabelę z polami x i y, dołącz metatabelę z metametodą __tostring i zwróć wynik konwersji tabeli na ciąg znaków za pomocą tostring().

Logika:

  • Utwórz tabelę z kluczami x i y ustawionymi na podane współrzędne
  • Utwórz metatabelę z __tostring, która zwraca ciąg znaków w formacie "Point(x, y)"
  • Dołącz metatabelę do tabeli punktu za pomocą setmetatable()
  • Zwróć tostring(point), aby uzyskać niestandardową reprezentację tekstową

Parametry:

  • x (liczba): współrzędna x punktu
  • y (liczba): współrzędna y punktu

Zwraca: niestandardową reprezentację tekstową punktu w formacie "Point(x, y)" (ciąg znaków)

Spróbuj swoich sił

function createPoint(x, y)
    -- Wpisz kod tutaj
end
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Lua online