He insertado Lua en mi aplicación C, y estoy tratando de averiguar por qué una tabla creada en mi código C a través de:Lua table.getn() devuelve 0?
lua_createtable(L, 0, numObjects);
y volvió a Lua, producirá un resultado de cero cuando llamo al siguientes:
print("Num entries", table.getn(data))
(Donde "datos" es la tabla creada por lua_createtable arriba)
Hay claramente los datos en la tabla, ya que puedo caminar por cada entrada (cadena: los datos de usuario) par a través de:
for key, val in pairs(data) do
...
end
Pero ¿por qué table.getn (data) return zero? ¿Debo insertar algo en el meta de la tabla cuando lo creo con lua_createtable? He estado buscando ejemplos de uso de lua_createtable, y no he visto esto en ninguna parte ...
¿No hay una manera fácil de hacer lo que estoy tratando de hacer, entonces? - Obtener el número de elementos (pares de lectura) en la tabla que tengo sin iterar sobre él directamente? – jimt
Puede hacer un seguimiento manual del tamaño de la tabla cada vez que cambie algo a la tabla y sobrecargar el meta-método '__len' para que el operador # devuelva ese valor. Por supuesto, este enfoque requiere mucha disciplina de codificación, olvídate de actualizar el valor del tamaño de la tabla y estás jodido. – ComicSansMS
Es grosero decir "utilizar el operador de longitud #" y no mencionar un ejemplo. Lo que esta respuesta está diciendo es "Para obtener la longitud de una matriz A, escriba #A". Puede parecer trivial, pero es algo que echa a muchas personas y causa dudas, ya que no se puede asumir que un operador se comporta de la manera en que crees que lo hace hasta que hayas probado y te hayas acostumbrado. Sin embargo, votado a favor. – Dmitry