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.
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
xetydéfinies sur les coordonnées fournies - Créez une métatable avec
__tostringqui 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 pointy(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
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
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?Récapitulatif - Gestionnaire d'événements simple