协程
COROUTINE协程:协作式多任务,写异步流程与生成器 | 本页 6 个接口。登录全站学员账号后:给函数打 ✓ 记录学习进度、写私人备注。
coroutine.create (f)
📖 用途
创建一个协程(thread 类型),参数 f 是协程体函数。创建后处于 suspended 状态,用 resume 启动。
📥 参数
| 参数 | 说明 |
|---|---|
| f | 协程体函数 |
📤 返回值
协程(thread)
💻 用法案例
local co = coroutine.create(function(a, b)
print(a + b)
end)
print(type(co)) --> thread
coroutine.resume(co, 1, 2) --> 3
coroutine.resume (co [, val1, ...])
📖 用途
启动/继续执行协程 co,参数会传给协程体(首次)或上一次 yield 的返回点。协程内出错不会中断主程序,而是通过返回值报告。
📥 参数
| 参数 | 说明 |
|---|---|
| co | 协程 |
| val1... | 传给协程的值 |
📤 返回值
成功: true + 协程 yield/结束的值;出错: false + 错误信息
💻 用法案例
local co = coroutine.create(function()
coroutine.yield('第一步')
return '完成'
end)
print(coroutine.resume(co)) --> true 第一步
print(coroutine.resume(co)) --> true 完成
coroutine.running ()
📖 用途
返回当前正在运行的协程。主线程中 5.1 返回 nil,5.2+ 返回主协程和 true。
📥 参数
无参数
📤 返回值
当前协程(thread);主线程中 5.1 返回 nil
💻 用法案例
print(coroutine.running()) --> nil(主线程, Lua 5.1)
coroutine.status (co)
📖 用途
返回协程状态:"running"(正在运行)、"suspended"(挂起)、"normal"(唤醒了别的协程)、"dead"(已结束)。
📥 参数
| 参数 | 说明 |
|---|---|
| co | 协程 |
📤 返回值
状态字符串
💻 用法案例
local co = coroutine.create(function() coroutine.yield() end) print(coroutine.status(co)) --> suspended coroutine.resume(co) print(coroutine.status(co)) --> suspended coroutine.resume(co) print(coroutine.status(co)) --> dead
coroutine.wrap (f)
📖 用途
创建协程并返回一个迭代/调用函数:每次调用它等于 resume 一次,直接返回协程的值(出错时直接抛错,不通过返回值)。
📥 参数
| 参数 | 说明 |
|---|---|
| f | 协程体函数 |
📤 返回值
可重复调用的函数
💻 用法案例
local gen = coroutine.wrap(function()
for i = 1, 3 do coroutine.yield(i * 10) end
end)
print(gen()) --> 10
print(gen()) --> 20
print(gen()) --> 30
coroutine.yield (...)
📖 用途
挂起当前协程,把参数交回给 resume 的调用方;下次 resume 时传入的参数成为 yield 的返回值。协程的“暂停键”。
📥 参数
| 参数 | 说明 |
|---|---|
| ... | 交回给 resume 调用方的值 |
📤 返回值
下次 resume 传入的参数
💻 用法案例
local co = coroutine.create(function()
local x = coroutine.yield(1)
print('收到', x)
end)
coroutine.resume(co)
coroutine.resume(co, '数据') --> 收到 数据Lua 接口说明书 · 996引擎教学资料 · chuan2.cn · 共 136 个接口