Lua 接口说明书 · 996引擎LUA API REFERENCE · 5.1/5.3

协程

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 个接口
📝 我的备注-
👤 学员中心 · 备注与学习进度