【笨木头Lua专栏】基础补充08：协同程序之resume-yield间的数据返回

1.resume的参数

resume函数除了第一个参数是协同程序外，还能继续传其他参数，如下代码：

```
12345    local co = coroutine.create(function(name)
print(name);
end);

coroutine.resume(co, "resume param");

```

resume第二个参数为“resume parame”，这个参数将会传递给协同程序的函数。

[LUA-print] resume param

2.resume函数的第二个返回值

```
1234567    local co = coroutine.create(function(name)
print(name);
coroutine.yield("yield param");
end);

local result, msg = coroutine.resume(co, "resume param");
print("msg:" .. msg);

```

[LUA-print] resume param
[LUA-print] msg:yield param

3.yield的返回值

```
123456789101112    local co = coroutine.create(function(name)
for i = 1, 2, 1 do
print(name);
print("co:" .. coroutine.yield("yield param"));
end
end);

for i = 1, 2, 1 do
print("=========第" .. i .. "次执行：")
local result, msg = coroutine.resume(co, "resume param");
print("msg:" .. msg);
end

```

[LUA-print] =========第1次执行：
[LUA-print] resume param
[LUA-print] msg:yield param
[LUA-print] =========第2次执行：
[LUA-print] co:resume param
[LUA-print] resume param
[LUA-print] msg:yield param

4.协同程序结束，主函数的返回值

```
12345678910111213    local co = coroutine.create(function(name)
for i = 1, 2, 1 do
print(name);
print("co:" .. coroutine.yield("yield param"));
end
return "协同程序函数结束喇！"
end);

for i = 1, 3, 1 do
print("=========第" .. i .. "次执行：")
local result, msg = coroutine.resume(co, "resume param");
print("msg:" .. msg);
end

```

[LUA-print] =========第1次执行：
[LUA-print] resume param
[LUA-print] msg:yield param
[LUA-print] =========第2次执行：
[LUA-print] co:resume param
[LUA-print] resume param
[LUA-print] msg:yield param
[LUA-print] =========第3次执行：
[LUA-print] co:resume param
[LUA-print] msg:协同程序函数结束喇！

3 评论

1. for i=1,2 do print(name) print(“co:” .. coroutine.yield(” yield name”)) end end) for i=1,2 do print(” —–第”.. i .. “次执行： “) local str = string.format(“resume param %d ” , i) local result ,msg = coroutine.resume(co,str) print(” msg: ” .. msg ) end第2次执行resume时，会输出 [LUA-print] —–第2次执行： [LUA-print] co:resume param 2 ，说明coroutine.yield返回的并不是第一次resume的参数。

2. Ynlh说道：

协程在ios上使用会出问题的，不建议用，貌似也没啥意义这东西