这是我的代码,它以字符串形式运行Lua脚本。
bool doString(const char *s)
{
const int ret = luaL_dostring(L, s);
if (ret)
{
if (ret == LUA_ERRSYNTAX)
printf("Error: %s", lua_tostring(L, -1));
else if (ret == LUA_ERRMEM)
printf("Error: memory error");
else
printf("Error: syntax error");
return false;
}
return true;
}
但是在很多情况下,我的代码仅输出
Error: syntax error
,而没有任何关于错误发生位置的进一步描述。如何正确打印错误消息,使其更具描述性?
最佳答案
luaL_dostring
成功返回LUA_OK /* 0 */
,失败则返回1
[1]。如果失败,它将在堆栈中推送一条错误消息,描述问题。这可以通过在docs [2]中按照luaL_loadstring
到lua_load
来确定。另外,luaL_dostring
调用lua_pcall
,当失败时(未设置处理程序),它也会将错误对象压入堆栈[3]。
当得到非零结果时,可以检查堆栈顶部是否有错误消息,并打印出:
bool doString(const char *s) {
const int ret = luaL_dostring(L, s);
if (ret != LUA_OK) {
printf("Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1); // pop error message
return false;
}
return true;
}
关于error-handling - 如何正确打印来自 `luaL_dostring()`的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56230859/