Lua中的"dofile"和C API中的"luaL_dofile"有什么区别?

使用Lua 5.3.4 C API,以下代码可以正常工作:

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

但以下代码无法执行文件:

luaL_dofile(lua, "mnemonics.lua");

会报告"attempt to call a string value"错误。

当我用以下代码替换它时:

luaL_loadfile(lua, "mnemonics.lua");

它会返回LUA_OK,但它没有像应该的那样将函数推入堆栈。事实上,在执行完后堆栈为空( gettop 返回0)。

我可以使用 dostring 方法绕过这个问题,但要么我漏了什么,要么这是一个 bug。

点赞
用户1429034
用户1429034

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

2017-03-02 19:34:27