lua中的“dofile”与C API中的“luaL_dofile”有什么区别?

时间:2017-03-01 20:01:03

标签: c lua lua-api

使用Lua 5.3.4 C API,这可行:

luaL_dostring(lua, "dofile('mnemonics.lua')");

但是这无法执行文件:

luaL_dofile(lua, "mnemonics.lua");

相反,它会报告“尝试调用字符串值”。

当我用

替换它时
luaL_loadfile(lua, "mnemonics.lua");

它返回LUA_OK,但它不会像预期的那样在堆栈上推送一个函数。事实上,之后堆栈是空的(gettop报告0)。

我可以使用dostring解决方法,但要么我遗漏了某些东西,要么就是有错误。

1 个答案:

答案 0 :(得分:0)

从空堆栈弹出会导致意外行为。 Lua解释器在执行C代码和执行Lua代码之间清理堆栈,因此混乱的堆栈不会影响Lua中的dofile