Menu
Coddy logo textTech

setmetatable & getmetatable

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

Maintenant que vous comprenez ce que sont les métatables d'un point de vue conceptuel, il est temps d'apprendre à les manipuler concrètement. Lua fournit deux fonctions essentielles pour cela : setmetatable() pour attacher une métatable à une table, et getmetatable() pour la récupérer.

Pour attacher une métatable à une table, vous utilisez setmetatable(). Cette fonction prend deux arguments : la table que vous souhaitez modifier (la table principale) et la métatable que vous souhaitez lui attacher :

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

Dans cet exemple, myMetatable est maintenant attaché à myTable. La métatable elle-même est vide pour le moment, mais cela établit la connexion entre les deux tables. La fonction setmetatable() retourne également la table principale, ce qui vous permet de chaîner l'opération si nécessaire.

Pour récupérer la métatable attachée à une table, vous utilisez getmetatable() :

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Sortie : true

Cette fonction renvoie la métatable si une est attachée, ou nil si la table n'a pas de métatable. Ceci est utile lorsque vous devez vérifier ou modifier la métatable d'une table après qu'elle a été définie.

Comprendre ces deux fonctions est la base de tout travail sur les métatables en Lua. Une fois que vous saurez attacher et récupérer des métatables, vous serez prêt à définir des métaméthodes qui modifient le comportement de vos tables.

challenge icon

Défi

Facile

Écrivez une fonction attachMetatable qui prend mainTable et metaTable et retourne true si la métatable a été attachée avec succès.

Utilisez setmetatable() pour attacher la métatable à la table principale, puis vérifiez l'attachement en utilisant getmetatable().

Logique :

  • Attachez metaTable à mainTable en utilisant setmetatable()
  • Récupérez la métatable attachée en utilisant getmetatable()
  • Comparez la métatable récupérée avec la metaTable originale
  • Retournez true si elles correspondent, false sinon

Paramètres :

  • mainTable (table) : La table à laquelle la métatable sera attachée
  • metaTable (table) : La métatable à attacher

Retourne : true si la métatable a été attachée et vérifiée avec succès, false sinon (booléen)

Aide-mémoire

Lua fournit deux fonctions essentielles pour travailler avec les métatables :

setmetatable() - Attache une métatable à une table. Prend deux arguments : la table principale et la métatable à attacher. Retourne la table principale.

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

getmetatable() - Récupère la métatable attachée à une table. Retourne la métatable si une est attachée, ou nil si la table n'a pas de métatable.

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Sortie : true

Essayez vous-même

function attachMetatable(mainTable, metaTable)
    -- Écrire 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