2010-11-22 6 views

Répondre

9

Prenez l'index metatable "__newindex" (deux caractères de soulignement), lorsque vous affectez une fonction à cette fonction, cette fonction sera appelée chaque fois que vous ajoutez un nouvel index à une table, comme;

table['wut'] = 'lol'; 

Ceci est un exemple de métabalier personnalisé utilisant '__newindex'.

ATable = {} 
setmetatable(ATable, {__newindex = function(t,k,v) 
    print("Attention! Index \"" .. k .. "\" now contains the value \'" .. v .. "\' in " .. tostring(t)); 
end}); 

ATable["Hey"]="Dog"; 

la sortie:

Attention! L'index "Hey" contient maintenant la valeur "Chien" dans la table: 0022B000

Les métabaliers peuvent également être utilisés pour décrire comment les tables doivent interagir avec d'autres tables et différentes valeurs.

Ceci est une liste de tous les indices possibles MetaTable vous pouvez utiliser

* __index(object, key) -- Index access "table[key]". 
* __newindex(object, key, value) -- Index assignment "table[key] = value". 
* __call(object, arg) -- called when Lua calls the object. arg is the argument passed. 
* __len(object) -- The # length of operator. 
* __concat(object1, object2) -- The .. concatination operator. 
* __eq(object1, object2) -- The == equal to operator. 
* __lt(object1, object2) -- The < less than operator. 
* __le(object1, object2) -- The <= less than or equal to operator. 
* __unm(object) -- The unary - operator. 
* __add(object1, object2) -- The + addition operator. 
* __sub(object1, object2) -- The - subtraction operator. Acts similar to __add. 
* __mul(object1, object2) -- The * mulitplication operator. Acts similar to __add. 
* __div(object1, object2) -- The/division operator. Acts similar to __add. 
* __mod(object1, object2) -- The % modulus operator. Acts similar to __add. 
* __tostring(object) -- Not a proper metamethod. Will return whatever you want it to return. 
* __metatable -- if present, locks the metatable so getmetatable will return this instead of the metatable and setmetatable will error. 

J'espère que cela efface les choses, si vous avez besoin d'autres exemples, click here.

+0

Merci. = D Et vous pouvez aussi utiliser metatable pour faire avancer votre script? – StudioMARIO

+0

Ouais, vous pourriez deviner. Bien que je serais plus intéressé par quelque chose qui fait une tâche plus complexe. – Anonymous

+2

Notez que votre exemple appartient à l'utilisateur. Sauf si vous faites 't [k] = v' quelque part dans le métaméthode' __newindex', la valeur ne sera pas dans la table. –

0

Ils permettent des tables à traiter comme d'autres types tels que chaînes, fonctions, etc. numéros

Questions connexes