Menu
Coddy logo textTech

Die __tostring-Metamethode

Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 20 von 54.

Wenn Sie eine Tabelle in Lua ausgeben, sehen Sie normalerweise etwas wenig Hilfreiches wie table: 0x5f8a20 – lediglich eine Speicheradresse. Die Metamethode __tostring ermöglicht es Ihnen, dieses Verhalten zu ändern, indem Sie genau definieren, was angezeigt werden soll, wenn Ihre Tabelle in einen String umgewandelt wird.

Diese Metamethode ist besonders nützlich für das Debugging und das Erstellen einer saubereren Ausgabe. Wenn Lua Ihre Tabelle in einen String umwandeln muss (wie bei der Verwendung von print()), prüft es, ob die Tabelle eine Metatabelle mit einem __tostring-Feld hat. Falls dies der Fall ist, ruft Lua diese Funktion auf und verwendet deren Rückgabewert anstelle der Standarddarstellung.

So implementieren Sie 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 __tostring-Funktion erhält die Tabelle als Argument und muss einen String zurückgeben. In diesem Beispiel erstellt sie einen formatierten String, der die x- und y-Werte des Vektors in einem lesbaren Format anzeigt.

Dies macht die Arbeit mit Ihrem Code wesentlich einfacher. Anstatt beim Debuggen kryptische Speicheradressen zu sehen, erhalten Sie aussagekräftige Informationen darüber, was Ihre Tabelle enthält.

challenge icon

Aufgabe

Einfach

Schreiben Sie eine Funktion createPoint, die x- und y-Koordinaten entgegennimmt und eine Point-Tabelle mit einer benutzerdefinierten String-Repräsentation zurückgibt.

Erstellen Sie eine Tabelle mit den Feldern x und y, fügen Sie eine Metatabelle mit der Metamethode __tostring hinzu und geben Sie das Ergebnis der Konvertierung der Tabelle in einen String mittels tostring() zurück.

Logik:

  • Erstellen Sie eine Tabelle, bei der die Schlüssel x und y auf die angegebenen Koordinaten gesetzt sind
  • Erstellen Sie eine Metatabelle mit __tostring, die einen String im Format "Point(x, y)" zurückgibt
  • Verknüpfen Sie die Metatabelle mit der Point-Tabelle unter Verwendung von setmetatable()
  • Geben Sie tostring(point) zurück, um die benutzerdefinierte String-Repräsentation zu erhalten

Parameter:

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

Rückgabewert: Die benutzerdefinierte String-Repräsentation des Punktes im Format "Point(x, y)" (string)

Spickzettel

Die Metamethode __tostring ermöglicht es Ihnen, anzupassen, wie eine Tabelle dargestellt wird, wenn sie in einen String umgewandelt wird. Standardmäßig zeigt das Drucken einer Tabelle eine Speicheradresse wie table: 0x5f8a20 an.

Wenn Lua eine Tabelle in einen String umwandelt (wie zum Beispiel mit print()), prüft es, ob die Tabelle eine Metatabelle mit einem __tostring-Feld hat. Falls vorhanden, ruft Lua diese Funktion auf und verwendet deren Rückgabewert.

Die __tostring-Funktion erhält die Tabelle als Argument und muss einen String zurückgeben:

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)

Sie können eine Tabelle auch explizit mit tostring() in einen String umwandeln, wodurch die Metamethode __tostring aufgerufen wird, falls sie definiert ist.

Probier es selbst

function createPoint(x, y)
    -- Schreibe hier den 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 Logic & Flow