Lua中简单协程的困惑问题

我正在学习Lua并尝试创建一个简单协程。在Lua 5.1中,下面的代码会导致错误:“尝试跨元方法/ C调用边界进行屈服”。我已经了解了这个限制,但我看不出它如何适用于我的代码。我在Lua 5.2中尝试过,得到了“尝试从协程外部进行屈服”的结果,这同样让我感到困惑。我相信答案会很显而易见!

output = {}
done = false

function mainLoop()
  while not done do
    if co == nil then
      co = coroutine.create(subLoop())
    elseif coroutine.status(co) == "suspended" then
      print(output[k])
      coroutine.resume(co)
    elseif coroutine.status(co) == "dead" then
      done = true
    end
  end
end

function subLoop()
  for k=1, 20 do
    table.insert(output, "这是测试输出的第 " .. k .. " 行")
    coroutine.yield()
  end
end

mainLoop()
点赞
用户805875
用户805875

你正在调用 subLoop

    if co == nil then
      co = coroutine.create(subLoop())

而不是将它传递给 coroutine.create

    if co == nil then
      co = coroutine.create(subLoop)

这会导致你尝试从主状态/(不太真正的)协程中执行 yield,在不同的版本中会出现不同的错误描述。

2017-07-02 05:21:45