有没有办法连续迭代 lua table ?

Is there a way to iterate through a lua table continuously?

我正在开发一款回合制游戏,我有一个table以下结构的玩家

players = {
    ["p1"] = Player(),
    ["p2"] = Player(),
    ...
    ["pn"] = Player()
}

我想做的是遍历 table 中的每个玩家(在每个玩家玩完他的回合后)并返回到第一个索引(在本例中为 "p1")

所以当我运行代码

时它应该做以下事情
function shift()
    -- do stuff to shift the player's turn
    print(player.name)
end

shift() -- "p1"
shift() -- "p2"
...
shift() -- "pn"
shift() -- "p1"
-- and so on

local index
function shift()
   if not index then index = next(players) end
   print(players[index].name)
   index = next(players, next)
end

如果我对问题的理解正确的话,那应该可以满足你的要求 ;)


编辑:

正如 Egor Skriptunoff 在他的评论中指出的那样,您还可以使用 return 键功能并使用 and 而不是 if:

local index
function shift()
   index = next(players,index)
   return index or next(players)
end

你的循环应该是这样的:

for k, player in pairs(players) do
     player:Player()
end

如果你想回忆第一个玩家的功能,那么只要跟着这个:

players[1]:Player()

希望对您有所帮助!

编辑:要让它无穷无尽,只需将它放在 'repeat until loop' 中,这样它看起来像:

repeat
    <for loop across all players>
until <condition>