Exception handling 如何正确调用lua解释器中的异常
我正在使用Lua5.1 我希望lua计算失败,如果我试图将一个数字除以零,将零值提高到负幂,或将模乘以零,则打印一个错误 我所做的是改变计算定义,从这样的东西Exception handling 如何正确调用lua解释器中的异常,exception-handling,lua,Exception Handling,Lua,我正在使用Lua5.1 我希望lua计算失败,如果我试图将一个数字除以零,将零值提高到负幂,或将模乘以零,则打印一个错误 我所做的是改变计算定义,从这样的东西 #define luai_numdiv(L,a,b) ((a)/(b)) inline lua_number luai_numdiv(lua_State *L, lua_Number a, lua_Number b){ if(b != cast_num(0)) return (a)/(b); else
#define luai_numdiv(L,a,b) ((a)/(b))
inline lua_number luai_numdiv(lua_State *L, lua_Number a, lua_Number b){
if(b != cast_num(0))
return (a)/(b);
else
luaD_throw(L, LUA_ERRRUN);
}
像这样的事情
#define luai_numdiv(L,a,b) ((a)/(b))
inline lua_number luai_numdiv(lua_State *L, lua_Number a, lua_Number b){
if(b != cast_num(0))
return (a)/(b);
else
luaD_throw(L, LUA_ERRRUN);
}
这根本不起作用。我相信这与luaD_Throw是一种不恰当的方式,导致lua计算失败有关
如何正确地使lua中的计算失败?您的代码正常工作。它只是不发出任何错误消息 尝试在luaD-throw(L,lua-ERRRUN)之前添加
lua-pushliteral(L,“除零”)
或者使用
luaG\u-runerror(L,“除零”)
而不是luaD\u-throw(L,LUA\u-ERRRUN)
来获得更详细的错误消息。这是否也适用于常量折叠?由于我在执行c=5/0时收到错误消息,而在a=5B=0C=a/b感兴趣时没有收到错误消息,因此我从未见过这些函数。为什么不是luaL_误差或lua_误差?常数折叠显式避免被零除。请参阅lcode.c
中的constfolding
。内核不调用lua\u error
或lua\u error
,因为它必须进行一些清理。您确定使用的是lua 5.1吗<5.1中的code>luai_numdiv未收到L
。在5.2中是这样的。我手动添加了它。无论它在哪里被使用。