3

我试图通过 if 语句找出某个数组是否存在,例如

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

以上似乎不起作用,我无法检查它是否存在,基本上我正在创建一个插件,它会扫描日志以查找某个事件,如果它是真的,它会返回拼写名称。我希望使用该 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 )是否存在,如果存在则不要再次创建它们,因为在这种情况下变量已经存在,因为它会将值返回给我,所以我无法检查如果它们不是 nil,我需要以某种方式检查这些值上是否存在表,如果不存在则创建它们。

提前致谢。

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 回答