Толкая Lua стол - PullRequest
       9

Толкая Lua стол

7 голосов
/ 21 октября 2010

Я создал таблицу Lua в C , но я не уверен, как поместить эту таблицу на вершину стека, чтобы передать ее функции Lua.

Кто-нибудь знает, как это сделать?

Это мой текущий код:

lua_createtable(state, libraries.size(), 0);
int table_index = lua_gettop(state);
for (int i = 0; i < libraries.size(); i++)
{
    lua_pushstring(state, libraries[i].c_str());
    lua_rawseti(state, table_index, i + 1);
}

lua_settable(state, -3);

[ Push other things ]
[ Call function ]

Ответы [ 3 ]

9 голосов
/ 21 октября 2010

Вот быстрая вспомогательная функция для выталкивания строк в таблицу

void l_pushtablestring(lua_State* L , char* key , char* value) {
    lua_pushstring(L, key);
    lua_pushstring(L, value);
    lua_settable(L, -3);
} 

Здесь я использую вспомогательную функцию для создания таблицы и передачи ее функции

// create a lua function
luaL_loadstring(L, "function fullName(t) print(t.fname,t.lname) end");
lua_pcall(L, 0, 0, 0);

// push the function to the stack
lua_getglobal(L, "fullName");

// create a table in c (it will be at the top of the stack)
lua_newtable(L);
l_pushtablestring(L, "fname", "john");
l_pushtablestring(L, "lname", "stewart");

// call the function with one argument
lua_pcall(L, 1, 0, 0);
1 голос
/ 22 июля 2012

Я сделал небольшой фрагмент кода с открытым исходным кодом, который решает переместить простые таблицы словаря Lua из C в Lua.

Вы можете проверить это здесь , должно работать хорошо.

1 голос
/ 21 октября 2010

Таблица уже находится в стеке, где lua_newtable ее оставили, не так ли?

...