2016-09-01 5 views
3

Wie kann ich eine globale Tabelle zugreifen, die bereits in Lua existiert in C++? Unten sind Code, den ich ausprobiert habe. Ich habe versucht, eine globale Variable erstellen und versuchen, eine diese lokal auf dem lokalen in Lua zu modifizieren aber die Dinge scheinen DontZugriff auf Lua globale Tabellen mit C++

 lua_State *lua_state = luaL_newstate(); 
     luaL_openlibs(lua_state); 
     // lua_createtable(lua_state, 0, 81); 
     // for (int i = 1; i <= 81; i++) 
     // { 
     // lua_pushnumber(lua_state, i); 
     // lua_pushnumber(lua_state, grid_[i - 1]); 
     // lua_settable(lua_state, -3); 
     // } 
     // 
     // lua_setglobal(lua_state, "arg"); 

     // lua_createtable(lua_state, 81, 1); 
     // 
     // for (int i = 1; i <= 81; i++) 
     // { 
     // lua_pushnumber(lua_state, i); 
     // lua_pushnumber(lua_state, grid_[i - 1]); 
     // lua_settable(lua_state, -3); 
     // } 
     // lua_setglobal(lua_state, "arg"); 


     luaL_loadfile(lua_state, "main.lua"); 
     lua_call(lua_state, 0, 0); 

     int t = 2; 

     /* table is in the stack at index 't' */ 
     lua_pushnil(lua_state); /* first key */ 
     while (lua_next(lua_state, t) != 0) { 
      /* uses 'key' (at index -2) and 'value' (at index -1) */ 
      printf("%s - %s\n", 
       lua_typename(lua_state, lua_type(lua_state, -2)), 
       lua_typename(lua_state, lua_type(lua_state, -1))); 
      /* removes 'value'; keeps 'key' for next iteration */ 
      lua_pop(lua_state, 1); 
     } 

Lua

problem = 
{ 
    {9, 0, 0, 1, 0, 0, 0, 0, 5}, 
    {0, 0, 5, 0, 9, 0, 2, 0, 1}, 
    {8, 0, 0, 0, 4, 0, 0, 0, 0}, 
    {0, 0, 0, 0, 8, 0, 0, 0, 0}, 
    {0, 0, 0, 7, 0, 0, 0, 0, 0}, 
    {0, 0, 0, 0, 2, 6, 0, 0, 9}, 
    {2, 0, 0, 3, 0, 0, 0, 0, 6}, 
    {0, 0, 0, 2, 0, 0, 9, 0, 0}, 
    {0, 0, 1, 9, 0, 4, 5, 7, 0}, 
} 

aktualisieren 1

int main() 
{ 
    lua_State *lua_state = luaL_newstate(); 
    luaL_openlibs(lua_state); 
    luaL_loadfile(lua_state, "main.lua"); 

    lua_getglobal(lua_state, "problem"); 

    //lua_pushglobaltable(lua_state);  // Get global table 
    lua_pushnil(lua_state);    // put a nil key on stack 
    while (lua_next(lua_state, -2) != 0) { // key(-1) is replaced by the next key(-1) in table(-2) 
     std::string name = lua_tostring(lua_state, -2); // Get key(-2) name 
     std::cout << name << std::endl; 
     lua_pop(lua_state, 1);    // remove value(-1), now key on top at(-1) 
    } 
    lua_pop(lua_state, 1);     // remove global table(-1) 

    lua_call(lua_state, 0, 0); 

    return 0; 
} 

Lua

zu arbeiten
problem = 
{ 
    {9, 0, 0, 1, 0, 0, 0, 0, 5}, 
    {0, 0, 5, 0, 9, 0, 2, 0, 1}, 
    {8, 0, 0, 0, 4, 0, 0, 0, 0}, 
    {0, 0, 0, 0, 8, 0, 0, 0, 0}, 
    {0, 0, 0, 7, 0, 0, 0, 0, 0}, 
    {0, 0, 0, 0, 2, 6, 0, 0, 9}, 
    {2, 0, 0, 3, 0, 0, 0, 0, 6}, 
    {0, 0, 0, 2, 0, 0, 9, 0, 0}, 
    {0, 0, 1, 9, 0, 4, 5, 7, 0}, 
} 

print("Lua Works") 
user_input = io.read(); 
+0

Um eine globale Variable zugreifen, tun 'lua_getglobal (L, "Problem");'. Aber dein Code hat mehr Probleme. Ihre Tabelle besteht aus einem Array von Arrays, und Ihr Code versucht, eine einfache Tabelle mit Schlüsseln und Werten zu erstellen. Überprüfen Sie diese andere Frage als Referenz http://stackoverflow.com/questions/29287988/iterating-over-table-of-tables-with-the-lua-c-api –

Antwort

0

Sie dies nicht tun ha Alle Werte, die auf dem Lua-Stack durchlaufen werden sollen.
Das int t=2; spiegelt nichts wider, und Ihr Skript gibt keine Werte zurück, die im Stapel verbleiben sollen.
Beispiele für den Zugriff auf die globale Tabelle finden Sie unter PIL book: 25.1 – Table Manipulation.

+0

Ist nicht "Problem" die Variable? – JekasG

+0

Es ist, aber es ist in Lua globale Tabelle gespeichert, und es ist nicht auf Lua-Stack, bis Sie lua_getglobal() aufrufen, oder von Skript mit 'return' Anweisung zurückgeben. – Vlad

+0

Wie würden Sie iterieren oder eine Kopie dieser Tabelle in C++ haben? – JekasG