0Pricing
Lua Academy · Leçon

Clés faibles et valeurs faibles

Créez des tables faibles avec __mode='k', 'v' ou 'kv' pour des structures semblables à des caches.

Clés faibles et valeurs faibles est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Que sont les tables faibles ?

Une table faible contient des références qui n’empêchent pas le ramassage. Les objets des tables faibles peuvent être récupérés même lorsque la table existe encore.

La méthode de métatable __mode

Définissez __mode dans la métatable pour contrôler la faiblesse : "k" pour des clés faibles, "v" pour des valeurs faibles, et "kv" pour les deux.

local weakValues = setmetatable({}, {__mode = "v"})
local weakKeys   = setmetatable({}, {__mode = "k"})

Exemple de valeurs faibles

Un cache dont les valeurs peuvent être récupérées lorsqu’il n’existe aucune autre référence.

local cache = setmetatable({}, {__mode = "v"})
local function getObject(key)
  if not cache[key] then
    cache[key] = {data = key}  -- expensive to create
  end
  return cache[key]
end

Après le GC, les valeurs faibles disparaissent

Une fois que la seule référence à un objet se trouve dans une table à valeurs faibles, le GC le récupère et l’entrée disparaît.

local t = setmetatable({}, {__mode = "v"})
do
  local obj = {}
  t[1] = obj
  print(t[1])  -- table: 0x...
end
collectgarbage()
print(t[1])  -- nil (collected)

Exemple de clés faibles

Les clés faibles permettent d’associer des métadonnées à des objets sans empêcher leur récupération. Lorsque l’objet clé est récupéré, l’entrée est supprimée.

local meta = setmetatable({}, {__mode = "k"})
local function attachMeta(obj, data)
  meta[obj] = data
end

Motif d’annotation d’objet

Annotez les objets avec des données supplémentaires à l’aide d’une table à clés faibles. Lorsque l’objet est récupéré par le GC, l’annotation est automatiquement supprimée.

local annotations = setmetatable({}, {__mode = "k"})
annotations[myObj] = {created = os.time(), owner = "Alice"}
print(annotations[myObj].owner)

Tables à clés et valeurs faibles

Une table "kv" possède à la fois des clés et des valeurs faibles. Seules les clés encore en vie (référencées ailleurs) conservent leurs entrées.

Tables éphémères

Dans Lua 5.2 et les versions ultérieures, les tables à clés faibles sont des éphémérons : si la seule référence à la valeur passe par la clé, les deux sont récupérées ensemble. Cela évite les rétentions inattendues.

Motif de cache à valeurs faibles

Usage classique : un cache de mémoïsation qui libère les résultats mis en cache lorsque la mémoire est nécessaire, sans suppression manuelle.

local function weakMemo(fn)
  local cache = setmetatable({}, {__mode = "v"})
  return function(x)
    if not cache[x] then cache[x] = fn(x) end
    return cache[x]
  end
end

Limitations

Les tables faibles ne peuvent pas contenir de types primitifs (nombres, booléens, chaînes) comme valeurs faibles : le GC ne peut pas les récupérer (les chaînes sont internalisées).

Quand utiliser des tables faibles

  • Des caches d’objets qui doivent libérer de la mémoire sous pression.
  • Associer des métadonnées à des objets externes.
  • Implémenter des tables d’internement pour des objets personnalisés.

Question sur les tables faibles

Que fait __mode = "v" dans une métatable ?

Récapitulatif : clés et valeurs faibles

Les tables faibles utilisent __mode = "k", "v" ou "kv" pour permettre au GC de récupérer leurs clés ou leurs valeurs. Elles sont essentielles pour créer des caches économes en mémoire et des motifs d’annotation d’objets.

Questions Fréquemment Posées

La leçon « Clés faibles et valeurs faibles » est-elle gratuite ?

Oui — le texte complet de « Clés faibles et valeurs faibles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Clés faibles et valeurs faibles » ?

Créez des tables faibles avec __mode='k', 'v' ou 'kv' pour des structures semblables à des caches. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Clés faibles et valeurs faibles » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Notions de base sur le ramasse-miettes de Lua
  2. Clés faibles et valeurs faibles
  3. Finaliseurs avec __gc
  4. Éviter les fuites mémoire
← Retour à Lua Academy