如何在 Lua 解释器中正确调用异常?

我正在使用 lua 5.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
        luaD_throw(L, LUA_ERRRUN);
     }

但这根本不起作用。我认为这与 luaD_Throw 不是一个正确的失败计算方式有关。

如何在 lua 中正确地失败计算?

点赞
用户107090
用户107090

你的代码可以运行,只是没有输出错误信息。

尝试在 luaD_throw(L,LUA_ERRRUN) 前添加 lua_pushliteral(L,"division by zero")

或者使用 luaG_runerror(L,"division by zero") 代替 luaD_throw(L,LUA_ERRRUN),以获取更丰富的错误信息。

2013-12-20 10:12:25