lua 中的 "dofile" 和 C API 中的 "luaL_dofile" 有什么区别?
What's the difference between "dofile" in lua and "luaL_dofile" in the C API?
使用 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");
它 returns LUA_OK
,但它不会像预期的那样将函数压入堆栈。事实上,之后堆栈为空(gettop
报告 0)。
我可以使用 dostring 解决方法,但要么是我遗漏了什么,要么是有错误。
从空堆栈弹出会导致意外行为。 Lua 解释器清理执行 C 代码和执行 Lua 代码之间的堆栈,因此混乱的堆栈不会影响 Lua 中的 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");
它 returns LUA_OK
,但它不会像预期的那样将函数压入堆栈。事实上,之后堆栈为空(gettop
报告 0)。
我可以使用 dostring 解决方法,但要么是我遗漏了什么,要么是有错误。
从空堆栈弹出会导致意外行为。 Lua 解释器清理执行 C 代码和执行 Lua 代码之间的堆栈,因此混乱的堆栈不会影响 Lua 中的 dofile
。