如何确定是否抛出了 Lua 错误?

我已将 Lua 解释器嵌入到我的 C 程序中,现在我有一个简单的问题,但似乎找不到清晰的答案。

假设我有一个 C 函数,我将其如下公开给 Lua:

static int calculate_value(lua_State *L)
{
    double x = luaL_checknumber(L, 1);
    return 0;
}

在此函数被调用后,如何判断 Lua 在调用 luaL_checknumber 时是否抛出了错误?有没有错误消息正坐在堆栈的顶部?还有其他指标表明有错误被抛出了吗?

点赞
用户734069
用户734069

通常情况下,不需要这样做。抛出错误的 Lua 函数使用 setjmp/longjmp(如果编译为 C++ 则使用异常)来将控制返回到调用 Lua 运行时的函数。错误将被呈现给 调用 calculate_value 函数的 Lua 函数。

如果想要以不同的方式处理参数错误,则不能使用 Lua 的 luaL_check* 函数。

2012-06-26 05:46:58
用户107090
用户107090

如果该函数是通过 Lua 调用的,可以使用 pall。或者在运行调用该函数的 Lua 脚本之前使用 lua_pcall

2012-06-26 12:17:43