(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 直到
yield
、return
或结束(在此期间打印 "Hi"
)
- 控制returns
"Bye"
打印
我的代码在这里:
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 直到
yield
、return
或结束(在此期间打印"Hi"
) - 控制returns
"Bye"
打印