我正在尝试通过if语句查找特定数组是否存在,例如
if array{} == nil then array = {} else print("it exists") end
上面的方法似乎不起作用,而且我也没有办法检查它是否存在。基本上,我正在创建一个插件,用于扫描特定事件的日志,如果事件为真,则返回法术名称。我希望使用该法术名称创建一个数组,但是“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)是否存在,如果存在,则不创建它们,因为在这种情况下变量已经存在并返回值给我,因此我无法检查它们是否为空,因为它们不会为空,我需要以某种方式检查这些值上是否存在表,如果不存在则创建它们。
提前感谢。
local spellID, spellName = select(12, ...), select(13, ...)
是愚蠢的。去掉, select(13, ...)
,只留下select(12, ...)
即可。select()
实际上返回从给定索引开始的所有值,而不仅仅是单个值,因此说local a, b = select(12, ...)
将把第12个参数分配给a
,第13个参数分配给b
。 - Lily Ballard