Lua table.getn () renvoie 0?

J’ai intégré Lua dans mon application C et j’essaie de comprendre pourquoi une table créée dans mon code C via:

lua_createtable(L, 0, numObjects); 

et retourné à Lua, produira un résultat de zéro lorsque j’appelle ce qui suit:

 print("Num ensortinges", table.getn(data)) 

(Où “data” est la table créée par lua_createtable ci-dessus)

Il y a clairement des données dans la table, car je peux parcourir chaque paire d’entrées (ssortingng: userdata) via:

 for key, val in pairs(data) do ... end 

Mais pourquoi table.getn (data) renvoie-t-il zéro? Dois-je insérer quelque chose dans la méta de la table lorsque je la crée avec lua_createtable? J’ai examiné des exemples d’utilisation de lua_createtable, et je ne l’ai jamais vu faire nulle part ….

table.getn (que vous ne devriez pas utiliser dans Lua 5.1+. Utilisez l’opérateur de longueur # ) renvoie le nombre d’éléments dans la partie tableau de la table.

La partie tableau est chaque clé commençant par le nombre 1 et augmentant jusqu’à la première valeur nil (non présente). Si toutes vos clés sont des chaînes, la taille de la partie tableau de votre table est 0.

Bien que cela coûte cher (O (n) vs O (1) pour des listes simples), vous pouvez également append une méthode pour compter les éléments de votre carte:

 >> function table.map_length(t) local c = 0 for k,v in pairs(t) do c = c+1 end return c end >> a = {spam="data1",egg='data2'} >> table.map_length(a) 2 

Si vous avez de telles exigences et si votre environnement vous le permet, pensez à utiliser penlight qui fournit ce type de fonctionnalités et bien plus encore.

l’opérateur # (et table.getn) renvoie effectivement la taille de la section array (cependant, lorsque vous avez une table trouée, la sémantique est plus complexe)

Il ne compte rien dans la partie en hachage de la table (par exemple, les clés de chaîne)

 for k,v in pairs(tbl) do count = count + 1 end