我试图通过if语句(例如
)找出某个数组是否存在if array{} == nil then array = {} else print("it exists") end
上面似乎没有用,我无法检查它是否存在,基本上我正在创建一个AddOn,它扫描日志以查找某个事件,如果是,则返回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)是否存在,如果是这样的话不再创建它们,因为在这种情况下变量已经存在,因为它将值返回给我所以我可以不检查它们是否为零,我需要以某种方式检查这些值是否存在表,如果不存在则创建它们。
提前致谢。
答案 0 :(得分:2)
您对表检查的声明是错误的。像这样使用它:
if type(array) == "table" then
print("it exists")
else
array = {}
end
答案 1 :(得分:1)
试试这个:
local spellID, spellName = select(12, ...), select(13, ...)
spellName = spellName or {}
spellName.sourceName = spellName.sourceName or {}
table.insert(spellName.sourceName, {id = spellID, stamp = timestamp })