這工作...Lua的錯誤沒有通過布爾
if (tileType == "water" or
(otherObj and otherObj:GetType() == "IceBlock")) then
self:SetNoClip(true)
else
self:SetNoClip(false)
end
- 這些不...
self:SetNoClip(tileType == "water" or
(otherObj and otherObj:GetType() == "IceBlock"))
//----------------------------------------------------------
local noClip = (tileType == "water" or
(otherObj and otherObj:GetType == "IceBlock"))
self:SetNoClip(noClip)
的otherObj
測試只是計算結果爲otherObj是否nil
與否。給出的變量在前一行中檢索。我得到了應用程序運行時的錯誤是:
unprotected error to call in Lua API(script path...: Did not pass boolean to SetNoClip).
SetNoClip是,抓住論證通過lua_toboolean
壓入堆棧LUA應用程序的功能。
那麼爲什麼第一個工作和第二個和第三個返回錯誤?
編輯:
SetNoClip 有這個定義。
int GameObject::LuaSetNoClip(lua_State *L) {
if (!lua_isboolean(L, -1)) {
LogLuaErr("Did not pass boolean to SetNoClip for GameObject: " + m_type);
return luaL_error(L, "Did not pass boolean to SetNoClip");
}
m_noClip = lua_toboolean(L, -1);
return 0;
}
的問題是,lua_isboolean
沒有做任何隱式類型轉換(但lua_toboolean
那樣),將只用於文字布爾值返回true。所以如果它看到零,它會返回一個布爾值不被傳遞。我只是刪除了布爾文字的錯誤檢查,因爲人們(包括我)通常依賴於非布爾文字的參數被正確對待爲布爾值。
FWIW,錯誤消息不只是胡言亂語。無論何時遇到錯誤,發佈消息總是有幫助的。通常他們會告訴你究竟在哪裏以及是什麼問題。我們很樂意幫助他們解決問題,以便下次可以利用他們。 – Cogwheel 2010-07-11 17:50:45
我沒有發佈它。這不是胡言亂語。問題是什麼非常清楚。沒有將布爾值傳遞給SetNoClip。 – random 2010-07-11 18:04:03
哦,對不起,我錯過了它<需要更多的咖啡因(對我的評論投票的人也是如此:P)。我讓它脫穎而出... – Cogwheel 2010-07-11 18:13:12