【发布时间】:2017-07-21 07:46:01
【问题描述】:
使用 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 解决方法,但要么我遗漏了什么,要么存在错误。
【问题讨论】:
-
这真的很奇怪。一个疯狂的猜测:你的 C 代码中早先发生的事情破坏了你的
lua状态?尝试使用 Valgrind 运行程序。 -
你能给我们展示一个最小的例子来重现你所看到的问题,因为我做不到。
-
在寻找一个最小的例子时,我发现问题是由于试图弹出一个空堆栈引起的。我误解了调用
lua_settable的行为。我相信 Lua 命令在 C API 命令不起作用时起作用的原因是堆栈在 C 代码和 Lua 代码之间的转换时被清理。