2017-05-08 2 views
1

Est-il possible d'imprimer une table sans utiliser de métabalies dans Lua?Imprimer une table sans métatables dans Lua

Dans le livre de Roberto Programmation Lua, il mentionne « La fonction print appelle toujours tostring pour formater la sortie ». Cependant, si j'Override tostring dans ma table, puis-je obtenir les résultats suivants:

> a = {} 
> a.tostring = function() return "Lua is cool" end 
> print(a) 
table: 0x24038c0 
+0

Qu'entendez-vous par "imprimer une table"? Voulez-vous dire imprimer chaque clé et valeur dans un tableau? Souhaitez-vous également imprimer des clés et des valeurs dans des sous-tables? Il n'y a pas de façon "standard" d'imprimer une table dans Lua, donc la réponse dépend de ce que vous voulez faire exactement. –

+0

Récupère un sérialiseur et imprime sa sortie. – FareakyGnome

Répondre

7

Il ne peut se faire sans métatables.


La fonction print appelle toujours tostring pour formater sa sortie.

Vous avez mal compris cela. Ici, tostring est la fonction tostring, pas un champ d'une table. Donc ce que cela signifie est que print(t) appellera print(tosstring(t)), c'est tout.

Pour les tables, tostring(t) trouvera alors s'il a un métaméthode __tostring, et l'utilise comme résultat. Donc finalement, vous avez toujours besoin d'un métatable.

local t = {} 
local mt = {__tostring = function() return "Hello Lua" end} 
setmetatable(t, mt) 
print(t) 
+2

'__tostring' peut être un champ dans' t' si vous appelez 'setmetatable (t, t)'. – lhf