我可以{'a', 'b', 'c'}使用常规for循环遍历数组/表(例如).然后有迭代使用pairs
for _, v in pairs({'a', 'b', 'c'}) do
io.write(v..'\n')
end
Run Code Online (Sandbox Code Playgroud)
但是当我有一个普通的旧阵列时,我真的没有发现自己关心钥匙.
有没有像迭代一样的方法
for value in array do end
Run Code Online (Sandbox Code Playgroud)
我确实看到了这种情况.例如,我正在使用库在我的游戏中创建地图,我发现你可以像这样访问地图图层中的对象
for object in map.layer["platform"].nameIs("platform") do
Run Code Online (Sandbox Code Playgroud)
有没有像这样迭代的方法?
对于数组,自然的方式是使用ipairs,而不是pairs.但是,它仍然需要一个关键:
for _, v in arr do
Run Code Online (Sandbox Code Playgroud)
如果你真的想避开关键项,那就制作你自己的迭代器.Lua中的编程提供了一个例子:
function values(t)
local i = 0
return function() i = i + 1; return t[i] end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
local arr = {'a', 'b', 'c', 'd'}
for e in values(arr) do
print(e)
end
Run Code Online (Sandbox Code Playgroud)
我看到你可以在map.layer ["platform"]中的对象中访问地图图层
中的对象.nameIs("platform")do
你在这里看到的只不过是与自定义迭代器一起使用的泛型.
.nameIs("platform")返回基本上像ipairs一样的函数.
例如,可以像这样实现该语法(尽管它不是您的库可能实际执行的操作):
local object = {
platform = {1,2,3,4},
mob = {4,3,2,1}
}
function object.nameIs(idx)
local array = object[idx]
local i = 0
return function ()
i = i+1
return array[i]
end
end
print "-- Platforms --"
for value in object.nameIs("platform") do
print(value)
end
print "-- Mobs --"
for value in object.nameIs("mob") do
print(value)
end
Run Code Online (Sandbox Code Playgroud)
有关更详细的说明,请参阅"Lua编程"在线手册,您需要查看第7节- 迭代器和Generic For