(LUA) 为什么这个协程包装似乎不起作用?

(LUA) Why is this coroutine wrap doesn't seem to work?

我的代码在这里:

coroutine.wrap(function()
    local x = os.clock() + 3
    repeat until os.clock() >= x
    print("Hi")
end)()

print("Bye")

通常,预期的输出应该是“Bye”然后等待3秒打印“Hi”。 但是协程先yield了,打印了Hi before Bye。

我的代码是不是做错了什么?我是协程的新手。

协程不是线程。他们不会同时 运行;线程中一次只能有一个协程 运行 。一旦你恢复协程(这是对包装协程的调用基本上所做的),它 运行s 直到它将控制权交还给等待产生值的原始位置。由于协程中没有 yield,因此调用时它将 运行 完成。所以你的代码

  • 声明一个匿名函数
  • 制作协程包装器
  • 通过调用包装器恢复协程
  • 函数 运行s 直到 yieldreturn 或结束(在此期间打印 "Hi"
  • 控制returns
  • "Bye" 打印