我正在学习 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
也对吗?
最佳答案
不,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
匿名函数,以及
meta
, 只调用一次。
关于lua - 返回或不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034820/