Perché non fa questo lavoro semplice coroutine Lua?
-
02-10-2019 - |
Domanda
Ho un semplice piccolo pezzo di codice Lua, che ho scritto io stesso, mentre l'insegnamento come co-routine di lavoro.
Sono stato bene fino a quando ho avuto modo di coroutine.wrap, il spec stati:
coroutine.wrap (f)
Crea un nuovo coroutine, con il corpo f. f deve essere una funzione Lua. Restituisce un funzione che riprende il coroutine ogni volta che viene chiamato. qualsiasi argomento passato alla funzione si comportano come il argomenti extra per riprendere. Restituisce il valori stessi restituiti da riprendere, tranne il primo booleano. In caso di errore, propaga l'errore.
Tuttavia questo codice:
Enumeration = {}
Enumeration.Create = function(generator)
return coroutine.wrap(generator, coroutine.yield)
end
local function TestEnumerator(yield)
yield(1) --ERROR HERE
yield(2)
yield(3)
end
local enumerator = Enumeration.Create(TestEnumerator)
local first = enumerator()
local second = enumerator()
local third = enumerator()
print (first, second, third)
lamenta che il rendimento è pari a zero (sulla linea ho segnato sopra). Da quanto ho capito, il rendimento dovrebbe essere il secondo argomento passato in coroutine.wrap, in modo da dove sto andando male?
soluzione davvero evidente, grazie alla risposta qui sotto
Enumeration.Create = function(generator)
local iter = coroutine.wrap(generator, coroutine.yield)
return function()
return iter(coroutine.yield)
end
end
Soluzione
Non si tratta di come funziona coroutine.wrap
. Devi passare coroutine.yield
nella prima chiamata al enumerator
.