2013-12-20 34 views
2

我使用Lua 5.1如何正確調用Lua解釋的異常

我想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中失敗計算的不正確方法有關。

我該如何在lua中正確計算失敗?

+0

您確定您使用的是Lua 5.1嗎? 5.1中的'luai_numdiv'沒有收到'L'。它在5.2中。 – lhf

+0

我手動添加它。無論它在哪裏使用。 – user3076936

回答

1

您的代碼有效。它只是不會發出任何錯誤消息。

嘗試在luaD_throw(L,LUA_ERRRUN)之前加入lua_pushliteral(L,"division by zero")

或者使用luaG_runerror(L,"division by zero")而不是luaD_throw(L,LUA_ERRRUN)來獲取更多信息的錯誤消息。

+0

這也適用於const摺疊?因爲我得到一個錯誤信息做 C = 5/0 當不是在 1 = 5 B = 0 C = A/B – user3076936

+0

有趣的是,我從來沒有見過這些功能。爲什麼不luaL_error或lua_error? – Schollii

+0

恆定摺疊明確避免被零除。參見'lcode.c'中的'constfolding'。 – lhf