2013-11-24 3 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. Итак, я смогу создать структуру вашего примера таким образом. В целом, он должен хорошо работать.

Смежные вопросы