3

次のようなifステートメントを介して、特定の配列が存在するかどうかを調べようとしています

if array{} == nil then array = {} else print("it exists") end

上記は機能しないようで、存在するかどうかを確認する方法がありません。基本的に、特定のイベントのログをスキャンする AddOn を作成しています。それが true の場合は、spellName を返します。その spellName で配列を作成したいのですが、(既存の配列を更新するのではなく) 新しい配列を作成するだけのように見えるため、 spellName = {} は機能しません。

local _SPD = CreateFrame("Frame");
_SPD:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
_SPD:SetScript("OnEvent", function(self, event, ...)

local timestamp, type, sourceName = select(1, ...), select(2, ...), select(5, ...)

if (event == "COMBAT_LOG_EVENT_UNFILTERED") then
    if select(2,...) == "SPELL_AURA_APPLIED" then
        if select(5,...) == UnitName("player") then

            local spellID, spellName = select(12, ...), select(13, ...)

             spellName = { 
                sourceName = {

                } 
            }

            table.insert(spellName["sourceName"], {id = spellID, stamp = timestamp })

            for k,v in pairs ( spellName["sourceName"] ) do
                print (k.. ": " ..v["id"].. " at " ..v["stamp"])
            end 
        end
    end
end
end);

基本的には、特定のオーラが適用されるたびにテーブルを再作成するだけです (これは予想される動作です)。

頭をぶつけましたが、spellName(およびsourceName)が存在するかどうかを確認する方法がわかりません。存在する場合は、変数がすでに存在するため、値を返すため、確認できないため、再度作成しないでくださいそれらがゼロではない場合、それらの値にテーブルが存在するかどうかを何らかの方法で確認し、存在しない場合はそれらを作成する必要があります。

前もって感謝します。

4

2 に答える 2

2

テーブルチェックの宣言が間違っています。次のように使用します。

if type(array) == "table" then
  print("it exists")
else
  array = {}
end
于 2013-01-30T19:14:30.947 に答える
1

これを試して:

local spellID, spellName = select(12, ...), select(13, ...)
spellName = spellName or {}
spellName.sourceName = spellName.sourceName or {}
table.insert(spellName.sourceName, {id = spellID, stamp = timestamp })
于 2013-01-30T19:42:34.143 に答える