Я пытаюсь вызвать функцию Lua из C. Функция Lua создает таблицу, а затем выполняет итерацию через нее. Он работает, как ожидается, при вызове из Lua, но не тогда, когда я вызываю его из программы C. Есть ли причина, по которой я не могу сделать то, что я здесь пытаюсь?Итерации через таблицу в Lua, в функции, вызванной от C
test.lua:
function f()
t = {["a"] = "aaa", ["b"] = "bbb", ["c"] = "ccc"}
for z, v in t do
print(t .. " " .. v)
end
end
test.c:
#include <string.h>
#include <stdio.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int main(void)
{
char read_buffer[1024];
lua_State *L = lua_open();
luaL_openlibs(L);
if (luaL_loadfile(L, "test.lua") || lua_pcall(L, 0, 0, 0))
fprintf(stderr, "Error loading test.lua");
lua_getglobal(L, "f");
if(lua_pcall(L, 0, 0, 0) != 0)
fprintf(stderr, "error: %s\n", lua_tostring(L, -1));
strncpy(read_buffer, lua_tostring(L, -1), sizeof(read_buffer));
lua_pop(L, 1);
printf("got from lua: %s\n", read_buffer);
lua_close(L);
return 0;
}
Спасибо!
ли вам не нужно вызывать 'load_dofile()' вместо 'lua_loadfile()'? –
Я считаю, что luaL_dofile просто вызывает lua_loadfile и lua_pcall: http://pgl.yoyo.org/luai/i/luaL_dofile – user693861
Вы обычно делаете это с помощью ['lua_next'] (http://pgl.yoyo.org/luai/i/lua_next). У них даже есть пример. – greatwolf