我已经在我的C程序中嵌入了一个Lua解释器,我有一个简单的问题,我似乎无法找到明确的答案。
假设我有一个C函数,我将其暴露给Lua,如下所示:
static int calculate_value(lua_State *L)
{
double x = luaL_checknumber(L, 1);
return 0;
}
在调用luaL_checknumber时,如何确定(在C中,在调用此函数之后)Lua抛出错误?是否只是位于堆栈顶部的错误消息?是否有其他指示器表明发生了错误?
答案 0 :(得分:2)
一般情况下,你没有。抛出错误的Lua函数使用setjmp/longjmp
(或编译为C ++时的异常)将控制权返回给调用Lua运行时。该错误将显示给调用您的calculate_value
函数的Lua函数。
如果您想以不同方式处理参数错误,则无法使用Lua的luaL_check*
函数。
答案 1 :(得分:1)
如果通过Lua调用该函数,则可以使用pall
。或者在运行调用该函数的Lua脚本之前使用lua_pcall
。