Andaba en busca de una solución para pasar listas de nombres a los scripts en Lua y la misma era estúpidamente sencilla: tablas. Las tablas en Lua son muy versátiles, se comportan como un arreglo clásico, o como un stl::map. O sea, que puedes referirte a un elemento así: Tabla["llave"]=valor.
Desde C, creas y asignas valores así:
//a continuacion creamos una tabla que simula un arreglo de cadenas
lua_newtable(luaVM);
lua_pushnumber(luaVM, 1); //indice
lua_pushstring(luaVM, "Valor 1"); //valor
lua_settable(luaVM, -3);
****
lua_setglobal(luaVM, "tabla"); //definimos el nombre de la tabla
Sencillo, no les parece? Acceder la lista desde Lua es fácil:
for k,v in ipairs(tabla) do print(k,v) end
En este caso usamos ipairs porque queremos los índices. Si quisiéramos las llaves en el caso de un diccionario, que es ocmo se llaman las tablas tipo map, usaríamos pairs.
Desde C, creas y asignas valores así:
//a continuacion creamos una tabla que simula un arreglo de cadenas
lua_newtable(luaVM);
lua_pushnumber(luaVM, 1); //indice
lua_pushstring(luaVM, "Valor 1"); //valor
lua_settable(luaVM, -3);
****
lua_setglobal(luaVM, "tabla"); //definimos el nombre de la tabla
Sencillo, no les parece? Acceder la lista desde Lua es fácil:
for k,v in ipairs(tabla) do print(k,v) end
En este caso usamos ipairs porque queremos los índices. Si quisiéramos las llaves en el caso de un diccionario, que es ocmo se llaman las tablas tipo map, usaríamos pairs.
Comentarios
Publicar un comentario