J'ai cette question, à propos de Lua metatables. J'ai entendu et regardé, mais je ne comprends pas comment les utiliser et pour quoi. Les métadonnées sont des fonctions qui sont appelées dans certaines conditions.Comment fonctionnent les métabalises et à quoi servent-elles?
Répondre
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.
Ils permettent des tables à traiter comme d'autres types tels que chaînes, fonctions, etc. numéros
Pour un haut niveau, divertissant lire vérifier le modèle prototype sur http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html. Cela peut vous aider avec le «quoi».
- 1. Sur quoi fonctionnent les opérateurs * et & si l'argument est complexe?
- 2. Les métabalises à description multiple sont-elles valides?
- 3. Comment fonctionnent les getters et les setters?
- 4. Les entités html dans les métabalises influencent-elles l'indexation?
- 5. Comment fonctionnent les sprites?
- 6. Les métabalises doivent-elles être codées en HTML?
- 7. Comment fonctionnent les torrents?
- 8. Comment fonctionnent les StyleTrigger?
- 9. À quoi servent les prises et les lancers dans Ruby?
- 10. Comment fonctionnent les correctifs et les Service Packs?
- 11. Qt question: Comment fonctionnent les signaux et les slots?
- 12. Comment fonctionnent les contextes OpenGL et les contextes de périphériques?
- 13. Comment fonctionnent les pré-incréments et les post-incréments?
- 14. Comment fonctionnent les applications Facebook?
- 15. À quoi servent les indexeurs?
- 16. À quoi servent les accords?
- 17. Comment fonctionnent les parseurs LL (*)?
- 18. Python: comment fonctionnent les ensembles
- 19. Comment fonctionnent les messagers (écoute)?
- 20. Comment fonctionnent les instructions préparées?
- 21. Comment fonctionnent les passerelles SMS?
- 22. Comment fonctionnent les cartes glissantes?
- 23. Comment fonctionnent les vidéos en streaming?
- 24. Comment fonctionnent les exemples Tomcat?
- 25. Comment fonctionnent les étiquettes Haskell?
- 26. Comment fonctionnent les opérateurs boost?
- 27. Comment fonctionnent les classes python?
- 28. OutOfMemoryError quoi augmenter et comment?
- 29. Comment fonctionnent les abonnements scom?
- 30. Comment fonctionnent les structures cachées?
Merci. = D Et vous pouvez aussi utiliser metatable pour faire avancer votre script? – StudioMARIO
Ouais, vous pourriez deviner. Bien que je serais plus intéressé par quelque chose qui fait une tâche plus complexe. – Anonymous
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. –