我正在编写一个WoW插件,它将跟踪和过滤项目列表。
将添加列表中尚未列出的项目;不应添加已列出的项目。
我遇到的问题是我的检查功能无法始终防止重复项目添加到列表中。
第一次添加项目 A 工作正常,如果它是最后添加的内容,则尝试再次重新添加它是正确的,而不是重新添加。
第一次添加项目 B 工作正常,如果它是最后添加的内容,则尝试再次重新添加它是正确的,而不是重新添加。
问题是,如果我尝试重新添加项目 A,而它不是最后添加的东西,它会错误地将项目重新添加到列表中;所以基本上我可以重新添加项目,只要它们不是最后一个要添加的项目。
这是一个 gif 向您展示正在发生的事情;
这是我的两个功能。
我还在这里链接了我的完整lua代码,在这里链接了目录。
-- check if item is already listed
local function isItemOnList(incomingItemID)
for k, v in pairs(AAAGlobalItemLinkList) do
if v.itemID == incomingItemID then
print(v.itemID, ':matched:', incomingItemID)
return true
end
print('no match', incomingItemID)
return false
end
end
-- add item link to list function
local function addItemLinkToList()
local cursorItemType, cursorItemID, cursorItemLink = GetCursorInfo()
print(cursorItemID)
if not isItemOnList(cursorItemID) then
local itemName,
itemLink,
itemRarity,
itemLevel,
itemMinLevel,
itemType,
itemSubType,
itemStackCount,
itemEquipLoc,
iconFileDataID,
itemSellPrice,
itemClassID,
itemSubClassID,
bindType,
expacID,
itemSetID,
isCraftingReagent = GetItemInfo(cursorItemID)
tempItemList = {
itemID = cursorItemID,
itemName = itemName,
itemLink = itemLink,
itemRarity = itemRarity,
itemLevel = itemLevel,
itemMinLevel = itemMinLevel,
itemType = itemType,
itemSubType = itemSubType,
itemStackCount = itemStackCount,
itemEquipLoc = itemEquipLoc,
iconFileDataID = iconFileDataID,
itemSellPrice = itemSellPrice,
itemClassID = itemClassID,
itemSubClassID = itemSubClassID,
bindType = bindType,
expacID = expacID,
itemSetID = itemSetID,
isCraftingReagent = isCraftingReagent
}
table.insert(AAAGlobalItemLinkList, 1, tempItemList)
print(cursorItemLink, 'added to list')
else
print(cursorItemLink, 'already listed')
end
updateScrollFrame()
ClearCursor()
end
-- update scroll frames function
local function updateScrollFrame()
wipe(listItems)
for index = 1, #AAAGlobalItemLinkList do
--if testItemRarity(AAAGlobalItemLinkList[index]) then
table.insert(listItems, AAAGlobalItemLinkList[index]['itemLink'])
--end
end
FauxScrollFrame_Update(testingScrollFrame, #listItems, NumberOfButtons, HeightOfButtons)
for index = 1, NumberOfButtons do
local offset = index + FauxScrollFrame_GetOffset(testingScrollFrame)
local button = testingScrollFrame.buttons[index]
if index > #listItems then
button:SetText('')a
button.index = nil
else
button.index = offset
--local itemName, itemLink = GetItemInfo(listItems[offset])
button:SetText(listItems[offset])
end
end
end
我根本没有收到任何错误。
我还在这里链接了我的完整lua代码,在这里链接了目录。
希望有人可以解释我是如何搞砸的,也可以为我指出正确的方向来修复它。
在你的函数中isItemOnList
你在循环内返回 falsefor
所以循环不能执行超过 1 次迭代。您应该将return false
置于for
循环之外:
-- check if item is already listed
local function isItemOnList(incomingItemID)
for k, v in pairs(AAAGlobalItemLinkList) do
if v.itemID == incomingItemID then
print(v.itemID, ':matched:', incomingItemID)
return true
end
end
print('no match', incomingItemID)
return false
end
你也可以不返回,所以nil
默认返回,对于if
检查,nil
与false
相同