Lua函数设计时,是返回结果还是不返回,有何考量?

2026-04-01 19:521阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计315个文字,预计阅读时间需要2分钟。

Lua函数设计时,是返回结果还是不返回,有何考量?

我在学习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协同程序.我发现了一件令我满意的东西

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函数设计时,是返回结果还是不返回,有何考量?

我在学习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协同程序.我发现了一件令我满意的东西

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只被调用一次.