Menu
Coddy logo textTech

La métaméthode __tostring

Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 20 sur 54.

Lorsque vous affichez une table en Lua, vous voyez généralement quelque chose de peu utile comme table: 0x5f8a20 — juste une adresse mémoire. La métaméthode __tostring vous permet de modifier ce comportement en définissant exactement ce qui doit être affiché lorsque votre table est convertie en chaîne de caractères.

Cette métaméthode est particulièrement utile pour le débogage et la création d'une sortie plus propre. Lorsque Lua doit convertir votre table en une chaîne de caractères (comme lors de l'utilisation de print()), il vérifie si la table possède une métatable avec un champ __tostring. Si c'est le cas, Lua appelle cette fonction et utilise sa valeur de retour au lieu de la représentation par défaut.

Voici comment l'implémenter :

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

setmetatable(vector, meta)

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

La fonction __tostring reçoit la table comme argument et doit retourner une chaîne de caractères. Dans cet exemple, elle construit une chaîne formatée affichant les valeurs x et y du vecteur dans un format lisible.

Cela rend votre code beaucoup plus facile à manipuler. Au lieu de voir des adresses mémoire cryptiques lors du débogage, vous obtenez des informations significatives sur ce que contient votre tableau.

challenge icon

Défi

Facile

Écrivez une fonction createPoint qui prend des coordonnées x et y et retourne une table point avec une représentation sous forme de chaîne personnalisée.

Créez une table avec les champs x et y, attachez un métatable avec la métaméthode __tostring, et retournez le résultat de la conversion de la table en chaîne de caractères en utilisant tostring().

Logique :

  • Créez une table avec les clés x et y définies sur les coordonnées fournies
  • Créez une métatable avec __tostring qui retourne une chaîne au format "Point(x, y)"
  • Attachez la métatable à la table point en utilisant setmetatable()
  • Retournez tostring(point) pour obtenir la représentation sous forme de chaîne personnalisée

Paramètres :

  • x (number) : La coordonnée x du point
  • y (number) : La coordonnée y du point

Retourne : La représentation sous forme de chaîne personnalisée du point au format "Point(x, y)" (string)

Aide-mémoire

La métaméthode __tostring vous permet de personnaliser la façon dont une table est affichée lorsqu'elle est convertie en chaîne de caractères. Par défaut, l'affichage d'une table montre une adresse mémoire comme table: 0x5f8a20.

Lorsque Lua convertit une table en chaîne (comme avec print()), il vérifie si la table possède une métatable avec un champ __tostring. S'il est présent, Lua appelle cette fonction et utilise sa valeur de retour.

La fonction __tostring reçoit la table comme argument et doit retourner une chaîne de caractères :

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

setmetatable(vector, meta)

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

Vous pouvez également convertir explicitement une table en chaîne de caractères en utilisant tostring(), ce qui invoquera la métaméthode __tostring si elle est définie.

Essayez vous-même

function createPoint(x, y)
    -- Écrivez le code ici
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow