我如何使用无状态迭代器并同时从1以外的索引开始

时间:2017-04-30 04:52:20

标签: for-loop lua iterator

我喜欢lua的循环,它鼓励像pairs / ipairs这样的无状态迭代器,但我不知道如何在使用它们时从1以外的索引开始。

1 个答案:

答案 0 :(得分:3)

虽然迭代器是无状态的,意味着它们没有保持任何状态,但仍然存在循环状态。有关通用循环的详细信息,请参见手册。您可以在自定义迭代器中设置自己的初始值:

local function iter(table, idx)
    idx = idx + 1
    local v = table[idx]
    if v then
        return idx, v
    end
end

local function start_at(table, idx) 
    return iter, table, idx-1
end

local values = {33,42,77,91}

for k,v in start_at(values, 3) do
    print(k,v)
end

假设ipairs实现永远不会改变,你可以这样破解:

local values = {33,42,77,91}

for k,v in ipairs(values), values, 3-1 do
    print(k,v)
end

最后一个示例将使用由ipairs返回的默认迭代器,同时将其他值置于循环状态,用更改的初始值替换它。不要在你的代码中实际使用,但它说明了一个想法。