2013-11-24 38 views
0

我需要一個表中返回到Lua是這樣的:如何將C函數的多維表返回給lua?

{ 
    [0] = { ["field1"] = "1", ["field2"] = "2" , ["field3"] = "3" }, 
    [1] = { ["field1"] = "10" , ["field2"] = "20", ["field3"] = "30" } 
} 

但是從C的角度和使用lua_ *功能 此外,0和1只是一個例子,它可能包含多個陣列像。 任何人都可以幫助我嗎?

+0

爲什麼被標記爲'C++'? – Walter

+0

我把它標記爲c,不是嗎? – ReBirTH

回答

3

使用lua_createtable(),lua_pushnumber(),lua_setfield()lua_settable()的簡單例子。

我認爲你正在寫某種包裝。但仍然幾乎相同。

/* Pushes multidimentional table on top of Lua VM stack. */ 
int 
l_push_multidim_table(lua_State *L) 
{ 
    /* Creates parent table of size 2 array elements: */ 
    lua_createtable(L, 2, 0); 

    /* Puts key of the first child table on-top of Lua VM stack: */ 
    lua_pushnumber(L, 1); 

    /*Creates first child table of size 3 non-array elements: */ 
    lua_createtable(L, 0, 3); 

    /* Fills the first child table: */ 
    lua_pushnumber(L, 1); 
    lua_setfield(L, -2, "field1"); 

    lua_pushnumber(L, 2); 
    /* setfield() pops the value from Lua VM stack. */ 
    lua_setfield(L, -2, "field2"); 

    lua_pushnumber(L, 3); 
    lua_setfield(L, -2, "field3"); 

    /* Remember, child table is on-top of the stack. 
    * lua_settable() pops key, value pair from Lua VM stack. */ 
    lua_settable(L, -3); 

    /* Pushes they key value for the second child table: */ 
    lua_pushnumber(L, 2); 

    /*Creates second child table of size 3 non-array elements: */ 
    lua_createtable(L, 0, 3); 

    /* Fills the second child table: */ 
    lua_pushnumber(L, 10); 
    lua_setfield(L, -2, "field1"); 

    lua_pushnumber(L, 20); 
    lua_setfield(L, -2, "field2"); 

    lua_pushnumber(L, 30); 
    lua_setfield(L, -2, "field3"); 

    /* Remember, child table is still on-top of the stack. 
    * lua_settable pops the key, value pair from Lua VM stack 
    * And puts child table into the parent. */ 
    lua_settable(L, -3); 

    /* Returns number of output tables: 
    * (1 multidimentional)   */ 
    return 1; 
} 

注意:在Lua數組中,值通常從1開始。所以,我已經用這種方式裝載了您的示例結構。總而言之,它應該運作良好。