2

現在、友人のために人気ゲーム World Of Warcraft のアドオンをコーディングしようとしています。私自身、ゲームについてあまり理解していません。ゲーム内でのデバッグは、彼がすべてのテストを行わなければならないため困難です。

私は Lua にかなり慣れていないので、これは非常に簡単に答えられる質問かもしれません。しかし、WoW で 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 かどうかを確認するときに、p1 を nil として呼び出そうとしたことに関する Lua エラーがスローされることです。nil になることもあり、これを正しく処理する必要があります。

これを行うための正しい最も効率的な方法は何でしょうか?

4

1 に答える 1

4

関数をpcallまたはxpcallでラップして、Lua によってスローされたエラーをインターセプトできるようにすることができます。

それを除けば、私は個人的にこの構成が読みやすいと感じています:

p1=string.match(str,pat)
if p1 then
    -- p1 is valid, eg not nil or false
else
    -- handle the problems
end
于 2011-11-24T08:30:37.743 に答える