暂停迭代。

我有一个 Lua 表格,t,我进行迭代:

for k, v in pairs(t) do
    b = false
    my_func(v)
end

我希望迭代在 b 全局变量变为 true 之前暂停。

在 Lua 中是否可行?

原文链接 https://stackoverflow.com/questions/10067834

点赞
stackoverflow用户734069
stackoverflow用户734069

除非您在协程中,否则没有 Lua 变量在没有您的代码更改它的情况下更改值的概念。因此,您将暂停,直到发生不可能发生的事情。Lua 本质上是单线程的。

正如先前所述,您可以使用协程来实现此目的,但必须相应地修改代码:

function CoIterateTable(t)
  for k, v in pairs(t) do
    b = false
    my_func(v)

    while(b == false) do coroutine.yield() end
  end
end

local co = coroutine.create(CoIterateTable)

assert(co.resume(t))
--Coroutine has exited. Possibly through a yield, possibly returned.
while(co.running()) do
  --your processing between iterations.
  assert(co.resume(t))
end

请注意,在迭代之间更改“t”引用的表不会产生有用的效果。

2012-04-09 01:13:52