. . resume , , resume, coroutine. coroutine yield s, , yield, resume.
, , resume , , . , .
, resume yield.
co = coroutine.create(function (f, args)
while f do
f = coroutine.yield(f(args))
end
end)
, :
co = coroutine.create(function (f, args)
while f do
f, args = coroutine.yield(f(args))
end
end)
, - , , :
co = coroutine.create(function (...)
local function capture_args(...)
return {...}, select("#", ...)
end
local tbl, len = capture_args(...)
local f = tbl[1]
while f do
tbl, len = capture_args(coroutine.yield(f(unpack(tbl, 2, len))
f = tbl[1]
end
end)
capture_args, {...} unpack . , nil . ... , nil ( ). , , nil.
capture_args, select. unpack , , .
capture_args , . .
: dummyFunc, dummyFunc, , , yield (.. resume).
, dummyFunc . dummyFunc - , dummyFunc, , .