我有一个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);
}
}
提前致谢!
最佳答案
您的问题是luaL_loadstring
无法加载字符串,因为它不是有效的Lua代码。但是,您不必费心检查它的返回值就可以找到答案。因此,您最终将试图执行 push 堆栈的编译错误,就像它是有效的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; //Perhaps throw or something to signal an error?
}
关于c++ - Lua语法错误的描述性错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781098/