Lua函数设计时,是返回结果还是不返回,有何考量?
- 内容介绍
- 文章标签
- 相关推荐
本文共计315个文字,预计阅读时间需要2分钟。
我在学习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`
我正在学习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
那么,回归的作用是什么?我认为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只被调用一次.
本文共计315个文字,预计阅读时间需要2分钟。
我在学习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`
我正在学习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
那么,回归的作用是什么?我认为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只被调用一次.

