lua_tonumber
не изменяет стек lua_State
.Вам нужно прочитать его по двум разным индексам 1 :
int ret1 = lua_tonumber(L, -2);
int ret2 = lua_tonumber(L, -1);
printf(L, "returned: %d %d\n", ret1, ret2);
Перед тем, как вызвать test
, ваш стек выглядит так:
lua_getglobal(L, "test"); /* function to be called */
lua_pushnumber(L, 3); /* push 1st argument */
lua_pushnumber(L, 4); /* push 2nd argument */
| 4 | <--- 2
+-----------+
| 3 | <--- 1
+-----------+
| test | <--- 0
+===========+
Послевызов 2 :
lua_pcall(L, 2, 2, 0)
+-----------+
| 3 | <--- -1
+-----------+
| 4 | <--- -2
+===========+
Альтернативой может быть ручное извлечение результатов после прочтения:
int ret1 = lua_tonumber(L, -1);
lua_pop(L, 1);
int ret2 = lua_tonumber(L, -1);
lua_pop(L, 1);
printf(L, "returned: %d %d\n", ret1, ret2);
1)" Если функция возвращает несколько результатов, первый результат помещается первым, поэтому при наличии результатов n
первый будет с индексом -n
, а последний с индексом -1
«. Программирование на Lua: 25,2
2)" Перед отправкой результатов lua_pcall
удаляет из стека функцию и ее аргументы ." Программирование на Lua: 25,2