我正在学习Lua协同程序。我发现了一件令我满意的东西,
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
那么,return
的作用是什么?我认为meta()
将返回一个值,匿名函数也应该返回它。那么为什么没有return
的匿名函数也是对的?
答案 0 :(得分:1)
不,meta
不会返回任何内容 - 至少没什么重要的。
传递给外部循环的i
变量的输出来自yield
方法,而不是来自返回。
如果你像这样编写循环,你可以看到这个:
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
只被调用一次。