Run Code Online (Sandbox Code Playgroud)int lua_resume (lua_State *L, lua_State *from, int nargs);[...]
该参数
from表示正在恢复的协程L。如果没有这样的协程,这个参数可以是NULL。
但这对我来说并不多。它究竟有什么作用?在什么情况下我必须传递除 NULL 以外的任何内容?
仅从5.2 的源代码来看,它似乎from仅用于正确计算恢复期间嵌套 C 调用的数量。
L->nCcalls = (from) ? from->nCcalls + 1 : 1;
Run Code Online (Sandbox Code Playgroud)
和
lua_assert(L->nCcalls == ((from) ? from->nCcalls : 0));
Run Code Online (Sandbox Code Playgroud)
的实现coroutine.resume似乎就是这样使用的。
它使用正在恢复协程线程from的主线程的值来恢复协程线程上的协程。
status = lua_resume(co, L, narg);
Run Code Online (Sandbox Code Playgroud)