lua - 返回或不返回

标签 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

那么,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/

相关文章:

lua - Lua中的进程间通信

shell - 如何在lua中获取shell脚本的返回码?

lua - 如何编写一个从不匹配任何内容的 LPeg 模式?

nginx - Luasocket + nginx 错误 - lua 入口线程中止 : runtime error: attempt to yield across C-call boundary

C++ Lua(对象表的表)

lua - 使用LUA脚本和SCAN命令来获取列表?

c++ - Lua:给自定义用户数据一个tostring方法

c - 实现 Lua SHA256 RFC-2104 兼容 HMAC 签名的最快路径?

if-statement - Lua 中的 Elseifs 被跳过

javascript - 正则表达式如何取值代理和用户名和号码?