Menu
Coddy logo textTech

Die __tostring-Metamethode

Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 20 von 54.

Wenn du eine Tabelle in Lua ausgibst, siehst du normalerweise etwas wenig Hilfreiches wie table: 0x5f8a20, lediglich eine Speicheradresse. Mit der Metamethode __tostring kannst du dieses Verhalten ändern, indem du genau festlegst, was angezeigt werden soll, wenn deine Tabelle in eine Zeichenkette umgewandelt wird.

Diese Metamethode ist besonders nützlich zum Debuggen und zum Erstellen einer übersichtlicheren Ausgabe. Wenn Lua deine Tabelle in eine Zeichenkette umwandeln muss (beispielsweise bei der Verwendung von print()), prüft es, ob die Tabelle eine Metatabelle mit einem Feld __tostring besitzt. Falls dies der Fall ist, ruft Lua diese Funktion auf und verwendet ihren Rückgabewert anstelle der standardmäßigen Darstellung.

So implementierst du es:

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

setmetatable(vector, meta)

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

Die Funktion __tostring erhält die Tabelle als Argument und muss eine Zeichenkette zurückgeben. In diesem Beispiel erstellt sie eine formatierte Zeichenkette, die die x- und y-Werte des Vektors in einem lesbaren Format anzeigt.

Dadurch lässt sich dein Code viel einfacher bearbeiten. Anstatt beim Debuggen kryptische Speicheradressen zu sehen, erhältst du aussagekräftige Informationen darüber, was deine Tabelle enthält.

challenge icon

Aufgabe

Einfach

Schreibe eine Funktion createPoint, die die Koordinaten x und y entgegennimmt und eine Punkttabelle mit einer benutzerdefinierten Zeichenfolgendarstellung zurückgibt.

Erstelle eine Tabelle mit den Feldern x und y, füge eine Metatabelle mit der Metamethode __tostring hinzu und gib das Ergebnis der Umwandlung der Tabelle in eine Zeichenfolge mit tostring() zurück.

Logik:

  • Erstelle eine Tabelle mit den Schlüsseln x und y, die auf die bereitgestellten Koordinaten gesetzt werden
  • Erstelle eine Metatabelle mit __tostring, die eine Zeichenfolge im Format "Point(x, y)" zurückgibt
  • Füge die Metatabelle mithilfe von setmetatable() an die Punkttabelle an
  • Gib tostring(point) zurück, um die benutzerdefinierte Zeichenfolgendarstellung zu erhalten

Parameter:

  • x (number): Die x-Koordinate des Punkts
  • y (number): Die y-Koordinate des Punkts

Rückgabewert: Die benutzerdefinierte Zeichenfolgendarstellung des Punkts im Format "Point(x, y)" (string)

Probier es selbst

function createPoint(x, y)
    -- Schreibe hier Code
end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmablauf

Übe selbstständig: Online-Lua-Compiler