我正在学习Lua协同程序.我发现了一件令我满意的东西 meta = function () for i = 1, 10 do coroutine.yield(i) endendfor i in coroutine.wrap(function() return meta() end) do print(i)end 和 meta = function () for i = 1, 10 do
meta = function () for i = 1, 10 do coroutine.yield(i) end end for i in coroutine.wrap(function() return meta() end) do print(i) end
和
meta = function () for i = 1, 10 do coroutine.yield(i) end end for i in coroutine.wrap(function() meta() end) do print(i) end
(注意第一版中有返回)给我
~/test% lua t.lua 1 2 3 4 5 6 7 8 9 10
那么,回归的作用是什么?我认为meta()将返回一个值,匿名函数也应该返回它.那么为什么没有返回的匿名函数也是对的呢?
不,meta不返回任何东西 – 至少没什么重要的.传递给外部循环的i变量的输出来自yield方法,而不是来自return.
如果你像这样编写循环,你可以看到这个:
for i in coroutine.wrap(function() val = {meta()} print ("----") print (val) end) do print(i) end
输出是
1 2 3 4 5 6 7 8 9 10 ---- nil
anoymous函数以及meta只被调用一次.