У меня есть небольшое замешательство в том, как lua_next действительно работает. Пользователь определяет таблицу:Lua C++ Table Iteration
a={["a1"]=20,["a2"]=30}
Я хочу напечатать эту таблицу с кодом C++:
inline int lua_print(lua_State* L)
{
wxString wxReturnStr=wxEmptyString;
wxString tempString=wxEmptyString;
int nargs = lua_gettop(L);
for (int i=1; i <= nargs; i++)
{
int type = lua_type(L, i);
switch (type)
{
case LUA_TNIL:
break;
case LUA_TBOOLEAN:
tempString<<(lua_toboolean(L, i) ? "true" : "false");
break;
case LUA_TNUMBER:
tempString<<lua_tonumber(L, i);
break;
case LUA_TSTRING:
tempString<<lua_tostring(L, i);
break;
case LUA_TTABLE:
{
lua_pushnil(L);
while(lua_next(L,-2))
{
const char* key=lua_tostring(L,-2);
double val=lua_tonumber(L,-1);
lua_pop(L,1);
tempString<<key<<"="<<val<<"\t";
}
break;
}
default:
tempString<<lua_typename(L, type);
break;
}
wxReturnStr=wxReturnStr+tempString+"\n";
tempString=wxEmptyString;
}
lua_pop(L,nargs);
Этот код работает очень хорошо, когда я звоню из Lua:
print(a) -- Works well
Однако, представьте себе, что у меня есть стол в Луа:
b={["b1"]=10, ["b2"]=15}
, если я позвоню код как:
print(a,b) -- Twice prints only contents of b
Моего понимание с тем, как lua_next работы на следующий рисунке: [версия # 1]
Где эта ошибка?
Как вы назначаете 'a' и' b'? – Kyle