我目前正在尝试为一位朋友编写流行游戏“魔兽世界”的附加组件。我自己对游戏了解不多,在游戏中调试它很困难,因为他不得不做所有的测试。
我对Lua很新,所以这可能是一个非常容易回答的问题。但是当魔兽世界中出现Lua错误时,它会将其抛入屏幕并阻碍它,这对游戏玩家来说非常糟糕,因为如果它在错误的时间抛出异常,它将停止游戏。我正在寻找一种方法来干净地处理被抛出的错误。这是我目前为该函数编写的代码。
function GuildShoppingList:gslSlashProc()
-- Actions to be taken when command /gsl is procced.
BankTab = GetCurrentGuildBankTab()
BankInfo = GetGuildBankText(BankTab)
local Tabname, Tabicon, TabisViewable, TabcanDeposit, TabnumWithdrawals, remainingWithdrawals = GetGuildBankTabInfo(BankTab)
p1 = BankInfo:match('%-%- GSL %-%-%s+(.*)%s+%-%- ENDGSL %-%-')
if p1 == nil then
self:Print("GSL could not retrieve information, please open the guild bank and select the info tab allow data collection to be made")
else
self:Print("Returning info for: "..Tabname)
for id,qty in p1:gmatch('(%d+):(%d+)') do
--do something with those keys:
local sName, sLink, iRarity, iLevel, iMinLevel, sType, sSubType, iStackCount = GetItemInfo(id);
local iSum = qty/iStackCount
self:Print("We need "..sLink.." x"..qty.."("..iSum.." stacks of "..iStackCount..")")
end
end
end
问题是在检查p1是否为nil时,它仍会抛出一个Lua错误,试图将p1调用为nil。它有时会是零,这需要正确处理。
最有效的方法是什么?