仅在从表格中获取数据时匹配第一个键

时间:2015-10-11 23:26:51

标签: lua

我将密钥存储在这样的表中:

d = { ["Rune_Test"] = "78100;Iconmisc0002", ["Sword_Test"] = "78097;Iconsword11" }

此表存储在我的ItemHandler.lua文件中。

local ItemHandler = {} 

d = {}

function ItemHandler:LoadData(_data)
    d = _data
end

function ItemHandler:GetData()
    return d
end

function SaveItem(nId, Name, Sprite)
    d[trim(string.gsub(Name, " ", "_"))] = nId .. ";" .. Sprite
end

我的主要lua文件是Central.lua,它看起来像这样:

function Central:OnRestore(eLevel, tData)
    DataItems = tData.items or {}
    ItemHandler:LoadData(tData.items or {})
end

function Central:OnSave(eLevel)
local tSave =
{
    items = ItemHandler.GetData()
}
return tSave
end

我的xml保存文件目前如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
<N K="items" T="t">
    <N K="Rune_Test" T="s" V="78100;Iconmisc0002"/>
    <N K="Sword_Test" T="s" V="78097;Iconsword11"/>
</N>

我使用这样的函数来查找特定键:

function ItemHandler:CheckItem(iName)
    if d[iName] ~= nil then
        Print("Got it!")
    end
end

我遇到的问题是我只得到xml文档中第一个键的匹配。

print(d.Rune_Test)
= 78100;Iconmisc0002
e
print(d.Sword_Test)
= nil

我想我只是错过了一些非常简单的事情。就LUA来说,我是一个很大的菜鸟,几天前就开始学习它了。 :)但我有C#知识所以它不是所有的jibbberish:P

1 个答案:

答案 0 :(得分:1)

如果你跳过加载/保存的东西,它可以工作:

d = { ["Rune_Test"]  = "78100;Iconmisc0002", 
      ["Sword_Test"] = "78097;Iconsword11" }

print(d.Rune_Test)
print(d.Sword_Test)

打印:

78100;Iconmisc0002
78097;Iconsword11

因此,您从XML加载的内容并不是您认为的那样。

尝试在加载后打印表格,例如

for k, v in pairs (d) do
  print ("key=", k, "value=", v)
end -- for

应该看到:

key= Rune_Test value= 78100;Iconmisc0002
key= Sword_Test value= 78097;Iconsword11