我是从Javascript来到Lua的,但是有一些显着的差异导致我做了愚蠢的事情。我定义了一个表文字来保存一些静态数据:
ObjectTypeDefs = {
mailbox={
time=40,
yield={{name="Base.Plank"}, {name="Base.Newspaper"}, {name="Base.ScrapMetal"}},
tools={{"Base.AxeStone", "Base.Axe"}},
cheat=false,
displayName="Mailbox"
},
laundry={
time=300,
yield={{name="Radio.ElectricWire"}, {name="Base.ScrapMetal"}},
exp={electrical=3},
tools={"Base.Screwdriver", "Base.KitchenKnife"},
cheat=false,
displayName="Laundry machine"
},
wood_chair={ ... and so on ...}
... more items here ...
}
Yo可以在每个条目中看到tools
子键。这定义了执行某些操作所需的一些游戏工具。我想为所有tools
子项分配一些验证器功能。我试着这样做:
print("Initializing object definitions: ");
-- Here, callbacks for definitions are assigned
for i,v in ipairs(ObjectTypeDefs) do
print("Defining checkItems callback for "..i..".");
v.tools.checkItems = ... some closure here ...;
end
但我得到的所有输出都是:
Initializing object definitions:
for循环甚至没有启动。它出什么问题了?这是可运行的示例:http://ideone.com/QqYU04
答案 0 :(得分:3)
答案 1 :(得分:3)
答案 2 :(得分:3)
ipairs
遍历整数索引,从yourTable[1]
开始,到第一个表格元素nil
结束。
您必须使用pairs
或next
(内部由pairs
使用)。但请记住,输出顺序是任意的。
for k,v in pairs(yourTable) do
...
end
或
for k,v in next, yourTable do
...
end