Как прочитать возвращаемое значение таблицы Lua из С++

У меня есть функция Lua, которая возвращает таблицу (содержащую набор строк), функция работает нормально, используя этот код:

lua_pushstring (lua, "funcname");  
lua_gettable   (lua, LUA_GLOBALSINDEX);
lua_pushstring(lua, "someparam");
lua_pcall (lua, 1, 1, 0);

функция возвращает таблицу. Как мне прочитать его содержимое из моего кода C++?


person nir    schedule 19.10.2010    source источник


Ответы (2)


Если вы спрашиваете, как просмотреть результирующую таблицу, вам нужно lua_next (ссылка также содержит пример). Как сказал egarcia, если lua_pcall возвращает 0, таблица, которую возвращает функция, может быть найдена на вершине стека.

person sbk    schedule 19.10.2010
comment
lua_next() будет перечислять все содержимое таблицы, однако прямой доступ к таблице может быть проще, если индекс известен. lua_gettable(), lua_getfield(), lua_rawget() или lua_rawgeti() могут получить доступ к содержимому таблицы, если известен индекс. - person gwell; 19.10.2010
comment
@gwell: правда, но, учитывая, что OP использовал lua_gettable в своем образце, я предположил, что он уже знает, по крайней мере, о некоторых из них. - person sbk; 20.10.2010

Если функция не выдает никаких ошибок, то lua_pcall:

  1. Удалить параметры из стека
  2. Поместите результат в стек

Это означает, что если ваша функция не выдает никаких ошибок, вы можете сразу же использовать lua_setfield — lua_pcall будет работать так же, как lua_call:

lua_pushstring (lua, "funcname");  
lua_gettable   (lua, LUA_GLOBALSINDEX);
lua_pushstring(lua, "someparam");
lua_pcall (lua, 1, 1, 0);
lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */

будет эквивалентно:

a = funcname(someparam)
person kikito    schedule 19.10.2010
comment
Назначение таблицы глобалу — это не совсем то же самое, что чтение ее содержимого. - person gwell; 19.10.2010