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

时间:2012-06-26 05:18:20

标签: c lua

我已经在我的C程序中嵌入了一个Lua解释器,我有一个简单的问题,我似乎无法找到明确的答案。

假设我有一个C函数,我将其暴露给Lua,如下所示:

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

在调用luaL_checknumber时,如何确定(在C中,在调用此函数之后)Lua抛出错误?是否只是位于堆栈顶部的错误消息?是否有其他指示器表明发生了错误?

2 个答案:

答案 0 :(得分:2)

一般情况下,你没有。抛出错误的Lua函数使用setjmp/longjmp(或编译为C ++时的异常)将控制权返回给调用Lua运行时。该错误将显示给调用您的calculate_value函数的Lua函数。

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

答案 1 :(得分:1)

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