Я пробовал много альтернатив для этой простой вещи, но не смог заставить ее работать. Я хочу, чтобы пользователь, чтобы определить таблицу из Lua в 1-й шаг:Чтение таблицы Lua от C++
a={["something"]=10} -- key=something, value=10
Затем, на втором этапе пользователь будет вызывать из Lua функции разработанный в C++:
b=afunction(a) -- afunction will be designed in C++
Код C++:
int lua_afunction(lua_State* L)
{
int nargs = lua_gettop(L);
if(nargs>1) throw "ERROR: Only 1 argument in the form of table must be supplied.";
int type = lua_type(L, 1);
if(type!=LUA_TTABLE) throw "ERROR: Argument must be a table";
//Until here it works as expected
lua_pushnil(L); //does not work with or without this line
const char* key=lua_tostring(L,-2);
double val=lua_tonumber(L,-1);
return 0;
}
Как видно из кода lua_type(L,1)
в нижней части стека сама таблица. Я принимал верх над таблицей, ключ будет располагаться и на вершине значения. Таким образом, высота стека равна 3 с idx = -1 значением, idx = -2 ключом. Однако кажется, что я не могу ни читать ключ («что-то»), ни значение (10). Любые идеи оценили.
проверить этот ответ: http://stackoverflow.com/questions/6137684/iterate-through-lua-table/6142700#6142700 –