Lua 语法错误的描述性错误信息

我有一个 Lua 解释器,每当我在我的代码中出现语法错误时,返回的错误信息只是 attempted to call a string value,而不是一个有意义的错误信息。例如,如果我运行这段 Lua 代码:

for a= 1,10
   print(a)
end

它不会返回一个有意义的 'do' expected near 'print' 和行号,而只会返回错误 attempted to call a string value

我的 C++ 代码如下所示:

void LuaInterpreter::run(std::string script) {
    luaL_openlibs(m_mainState);

    // Adds all functions for calling in lua code
    addFunctions(m_mainState);

    // Loading the script string into lua
    luaL_loadstring(m_mainState, script.c_str());

    // Calls the script
    int error =lua_pcall(m_mainState, 0, 0, 0);
    if (error) {
        std::cout << lua_tostring(m_mainState, -1) << std::endl;
        lua_pop(m_mainState, 1);
    }
}

提前致谢!

点赞
用户5624167
用户5624167

我成功地通过以下代码替换来解决问题:

int error = luaL_dostring(m_mainState, script.c_str());
2016-06-13 02:52:21
用户734069
用户734069

你的问题在于 luaL_loadstring 加载的字符串不是有效的 Lua 代码而导致失败。但是你从未去检查它的返回值以找出问题所在。因此,你最终尝试执行它推到堆栈中的 编译错误 ,仿佛它是有效的 Lua 函数一样。

使用这个函数的正确方法如下所示:

auto error = luaL_loadstring(m_mainState, script.c_str());
if(error)
{
    std::cout << lua_tostring(m_mainState, -1) << std::endl;
    lua_pop(m_mainState, 1);
    return; //也许抛出异常或者其他错误信号?
}
2016-06-13 03:02:53