¿Cuál es la interfaz de C para Lua para acceder a pares clave / valor de una tabla?
-
12-09-2019 - |
Pregunta
En Lua, utilizando el C interfaz, dada una tabla, ¿cómo iterar a través de pares clave / valor de la tabla?
Además, si algunos de los miembros de mesa tabla se añaden utilizando matrices, ¿necesito un bucle separado para iterar a través de los así o hay una sola manera de iterar aunque los miembros al mismo tiempo que los pares clave / valor / p>
Solución
lua_next()
es lo mismo que la función de next()
Lua, que es utilizado por la función pairs()
. Itera todos los miembros, tanto en la parte de matriz y la parte de hash.
Si desea que el análogo de ipairs()
, la lua_objlen()
le ofrece la misma funcionalidad que #
. Usarlo y lua_rawgeti()
numéricamente para iterar sobre la parte matriz.
Otros consejos
Como dice Javier, desea que el href="http://www.lua.org/manual/5.1/manual.html#lua_next" rel="noreferrer"> lua_next()
función . Pensé que un ejemplo de código podría ayudar a hacer las cosas más claras ya que esto puede ser un poco difícil de usar a primera vista.
Citando el manual:
Un recorrido típico es el siguiente:
/* table is in the stack at index 't' */ lua_pushnil(L); /* first key */ while (lua_next(L, t) != 0) { /* uses 'key' (at index -2) and 'value' (at index -1) */ printf("%s - %s\n", lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1))); /* removes 'value'; keeps 'key' for next iteration */ lua_pop(L, 1); }
Tenga en cuenta que lua_next()
es muy sensible al valor de clave a la izquierda en la pila. No lua_tolstring()
llamada en la tecla a no ser que realmente ya es una cadena porque esa función reemplace el valor se convierte.