Je veux créer une table comme à l'aide de l'API C? p> Mon approche actuelle est P> lua_createtable(L, 2, 0);
int outertable = lua_gettop(L);
3 Réponses :
Voici un programme complet et minimal démontrant comment nier des tables. Fondamentalement, ce qui vous manque, c'est le lua_setfield code>
fonction.
#include <stdio.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" int main() { int res; lua_State *L = lua_open(); luaL_openlibs(L); lua_newtable(L); /* bottom table */ lua_newtable(L); /* upper table */ lua_pushinteger(L, 0); lua_pushinteger(L, 4); lua_settable(L, -3); /* uppertable[0] = 4; pops 0 and 4 */ lua_pushinteger(L, 0); lua_insert(L, -2); /* swap uppertable and 0 */ lua_settable(L, -3); /* bottomtable[0] = uppertable */ lua_setglobal(L, "t"); /* set bottom table as global variable t */ res = luaL_dostring(L, "print(t[0][0] == 4)"); if(res) { printf("Error: %s\n", lua_tostring(L, -1)); } return 0; }
Comment créer des indices numériques avec Lua_Setfield?
Voici quelque chose de générique, je suis venu pour résoudre un problème similaire, basé sur la réponse de LHF. Cela créera une table Lua pour le formulaire
int list_of_lists_to_lua(lua_State* L, const std::vector<std::vector<std::string>>& convertme) { lua_newtable(L); int counter = 0; for (const std::vector<std::string>& list : convertme) { lua_pushnumber(L, ++counter); lua_newtable(L); int counter2 = 0; for (const std::string& item : list) { lua_pushnumber(L, ++counter2); lua_pushstring(L, item); lua_settable(L,-3); } lua_settable(L,-3); } return 1; }
Ne ressemble pas à C. Ni la compilation ne compile pas sans conviction appropriée.
Ceci est C ++ en utilisant ERIS.