Menu
Coddy logo textTech

La metaméthode __tostring

Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 20 sur 54.

Lorsque vous affichez une table en Lua, vous voyez généralement quelque chose d’inutile comme table: 0x5f8a20, c’est-à-dire simplement 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.

Cette métaméthode est particulièrement utile pour le débogage et la création d’une sortie plus claire. Lorsque Lua doit convertir votre table en chaîne (par exemple 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 renvoyer une chaîne. 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 à utiliser. Au lieu de voir des adresses mémoire énigmatiques lors du débogage, vous obtenez des informations significatives sur le contenu de votre table.

challenge icon

Défi

Facile

Écrivez une fonction createPoint qui prend les coordonnées x et y et renvoie une table représentant un point avec une représentation textuelle personnalisée.

Créez une table avec les champs x et y, associez-lui une métatable avec la métaméthode __tostring, puis renvoyez le résultat de la conversion de la table en chaîne à l’aide de 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 renvoie une chaîne au format "Point(x, y)"
  • Associez la métatable à la table du point à l’aide de setmetatable()
  • Renvoyez tostring(point) pour obtenir la représentation textuelle personnalisée

Paramètres :

  • x (nombre) : la coordonnée x du point
  • y (nombre) : la coordonnée y du point

Renvoie : la représentation textuelle personnalisée du point au format "Point(x, y)" (chaîne)

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 Logique et flux

Entraînez-vous par vous-même : Compilateur Lua en ligne