我一直在四处寻找一种方法来处理 Lua 的 C API 错误,并在控制台中简单地打印出来。虽然,我找不到一个有效的例子。我想做的只是像这样:
static int test(lua_State *L)
{
if(!lua_isstring(L, 1))
return luaL_error(L, "This is not a valid string");
}
或
static int test(lua_State *L)
{
try
{
if (!lua_isstring(L, 1))
{
throw luaL_error(L, "This is not a valid string");
}
}
catch (int e)
{
std::cout << "Error " << e << std::endl;
}
}
但到目前为止没有任何效果。使用 LUA C API 进行错误处理并在控制台中显示消息的正确方法是什么?
最佳答案
第一个代码示例是处理 Lua 错误的正确方法之一,但您似乎对它的工作原理感到困惑。
您正在编写一个 C 函数来实现一个将暴露给 Lua 的接口(interface)。它像这样的 Lua 代码:
local function test(s)
if type(s) ~= "string" then
error("This is not a valid string")
end
end
首先出错的代码不是 test
函数,而是使用无效参数调用它的代码。
当您的 Lua 代码以无效方式调用该函数时(例如 test(42)
),它会引发 Lua 错误,并以字符串作为错误消息。如果您从标准 Lua 解释器调用它,它将停止程序,打印错误消息和堆栈跟踪。
如果你想在你的 Lua 代码中做一些其他的事情,例如只打印错误信息,你可以使用 pcall
捕获错误,这有点像其他语言中的 try/catch :
local ok, err_msg = pcall(test, 42)
if not ok then
print(err_msg)
end
请注意,由于此错误是由无效参数类型引起的,您的代码可能会通过使用 luaL_checkstring 之一得到改进。/luaL_checklstring , luaL_argcheck或 luaL_argerror而不是直接使用 luaL_error。
要了解有关 C API 工作原理的更多信息,我建议您阅读“Programming in Lua(第 4 版)”一书中的专门部分。
关于c++ - 如何使用 C API for Lua 在控制台中打印错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44083399/