Lua: Le tutoriel  wxWidgets
Lua
Les métatables: Les autres métaméthodes.
__concat(t1, t2): Cette métaméthode est liée à l'opérateur de concaténation de chaînes de caractères.

Ce qui permet de concaténer 2 tables: table0 = table1..table2

	mt.__concat = function(a,b)
	  local t = a
	  for k in ipairs(b) do
		 table.insert(t,b[k])
	  end
	  return t
	end
				

__tostring(objet): Cette métaméthode modifie les caractéristiques de print()
Ce qui permet d'afficher le contenu d'une table en utilisant print.
table1 = {1, 2, 3}
Sans la métaméthode: print(table1) --> table: 01092738
Avec la métaméthode: print(table1) --> 1 2 3
	mt.__tostring = function(b)
	  local s = ""
	  for k in ipairs(b) do
		 s = s.." "..b[k]
	  end
	  return s
	end
				

__call(objet, ...): Cette métaméthode permet d'appeler une table comme s'il s'agissait d'une fonction.
	mt.__call = function(objet)
	... ici nouvelles informations concernant la table..
	end
				


__metatable(objet): Cette métaméthode permet de bloquer l'accès à une table, par un utilisateur non autorisé.
	mt.__metatable = "ici le message.."
				


__index(table, clé): Cette métaméthode permet de gérer l'accès au contenu d'une table.

Lorsque vous tentez d'accéder à un champ non-existant d'une table, Lua cherche la métatable de cette table et la métaméthode __index.
S'il la trouve, il vous indique quoi faire. Sinon, il renvoie nil.

La métaméthode __index peut être une table ou une fonction.

1- Si c'est une table, le champ absent sera recherché dans cette table.

	
	table_type = {x = 100, y = 150}	-- Construction d'une table 'type'.	
	
	table = {}	-- Construction de la table.	
	
	mt = {}	-- Construction de la métatable.
	
	mt._index(table_type)	-- Construction de __index.
	
	setmetatable(table, mt)	-- Association table et mt

	print(table.x, table.y) --> 100, 150
				

2- Si c'est une fonction, __index peut prendre 0, 1 ou 2 arguments, dans ce cas, ces arguments sont respectivement la table appelante et le champ recherché. __index(), __index(table) ou __index(table, champ)

	-- Sans argument.
	mt.__index = function() return 100 end		
				
	-- Avec 1 argument.
	mt.__index = function(k) return k end		
				
	-- Avec 2 arguments.
	mt.__index = function(k, v) return v end
				

__newindex( objet, clé, valeur ): Si __index permet de gérer l'accès au contenu d'une table, __newindex permet de gérer la modification du contenu d'une table.

Elle peut par exemple, empêcher de rajouter un nouveau champ.

	-- Soit la table suivante.
	table = {a = 10, b = 20, c = 30}		
	
	-- Mise en place, maintenant classique.
	mt = {}
	mt.__newindex = function(t, k, v) end
	setmetatable(table, mt)			
				
	-- Et maintenant.			
	table.z = 150			
	print(table.z) 
	
		==> ce qui donnera: nil
				

__mode(): Cette métaméthode permet de définir le niveau de "faiblesse" de la référence vers une table.

Le niveau de "faiblesse", est l'aptitude qu'aura une table à être prise en compte ou non par le ramasse-miettes (garbagecollector).

La faiblesse d'une table est contrôlée par le champ de sa métaméthode: __mode.

Si le champ __mode est une chaîne contenant le caractère "k", alors les clés de la table seront considérées comme faibles.

Si le champ __mode contient la lettre "v", alors ce sera les valeurs de la table qui seront considérées comme faibles.

logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 5 décembre 2012.
Valid XHTML 1.0 Transitional

wxlualogo
Flèche haut
Flèche gauche
Flèche haut
Flèche droite