вернуть или не вернуть - PullRequest
4 голосов
/ 17 мая 2011

Я изучаю сопрограммы 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 тоже подходит?

1 Ответ

1 голос
/ 17 мая 2011

Нет, 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, вызывается только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...