如何在lua中恢复一个协程?

我尝试在lua中使用协程,我尝试了下面的代码,在repl.it上https://repl.it/repls/WordyWonderfulVisitor上,它没有在循环中打印列表内容。

local list = {1,2,3};

local function iter()
  for i, v in ipairs(list) do
    print(i, v)
    coroutine.yield();
  end
end

local co = coroutine.create(iter);
coroutine.resume(co);
coroutine.resume(co);
-- iter();

我的代码有什么问题吗?

点赞
用户1442917
用户1442917

你的代码没有问题。它按预期打印出 1 12 2,而且在 Lua 5.1-5.4 的版本中结果都是相同的。

如果你想看到另外一个结果 3 3,那么你需要再调用一次 resume。你还可以使用 coroutine.status 来检查协同程序的状态,所以在前两次执行后你会得到 "suspended",在执行完成后你会得到 "dead"

2018-07-17 06:00:29