Creare e riprendere una coroutine
Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 49 di 54.
Ora che hai capito cosa sono le coroutine, impariamo a crearle e ad avviarle in Lua.
Per creare una coroutine, usa la funzione coroutine.create(). Questa funzione accetta una funzione normale come argomento e la racchiude in un oggetto coroutine. Ecco la sintassi di base:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)A questo punto, la coroutine esiste, ma non ha ancora iniziato a essere eseguita. La funzione myTask non è stata chiamata. Per avviare o riprendere effettivamente l’esecuzione di una coroutine, usa coroutine.resume():
coroutine.resume(co)Quando chiami resume() su una coroutine per la prima volta, inizia l’esecuzione dall’inizio della sua funzione. Se la coroutine viene eseguita fino alla fine senza pause, si completa e non può essere ripresa di nuovo.
Ecco un esempio completo:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Stampa entrambi i messaggiLa coroutine viene eseguita dall'inizio alla fine tutta d'un fiato. Nella prossima lezione imparerai a far sì che le coroutine si mettano in pausa a metà dell'esecuzione.
Sfida
FacileScrivi una funzione runSimpleCoroutine che accetta un message e restituisce l'output di una coroutine che stampa quel messaggio.
Crea una coroutine usando coroutine.create() che racchiude una funzione che stampa il messaggio fornito. Poi usa coroutine.resume() per eseguire la coroutine. La funzione deve restituire il messaggio che è stato stampato.
Logica:
- Definisci una funzione che stampa il parametro message
- Crea una coroutine a partire da quella funzione usando
coroutine.create() - Riprendi la coroutine usando
coroutine.resume() - Restituisci il messaggio che è stato stampato
Parametri:
message(stringa): Il messaggio che la coroutine deve stampare
Restituisce: Il messaggio che è stato stampato dalla coroutine (stringa)
Provalo tu
function runSimpleCoroutine(message)
-- Scrivi il codice qui
end
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Iterazione avanzata delle tabelle
Iterare con pairs()Iterare con ipairs()pairs() vs. ipairs()Riepilogo - Scheda del personaggio2Altre funzioni della libreria table
table.concat()Costruzione di tabelle e unpack()table.sort()Ordinamento personalizzato con funzioniRiepilogo - Tabellone dei punteggi più alti3Concetti avanzati sulle funzioni
Restituire più valoriFunzioni variadiche (...)Funzioni come valori di prima classeFunzioni anonimeChe cos'è una closure?Riepilogo - Gestore di eventi semplice9Le coroutine per principianti
Che cos'è una coroutine?Creare e riprendere una coroutineMettere in pausa con coroutine.yield()Riprendere e sospendereVerificare lo stato della coroutineRiepilogo - Generatore di numeriRiepilogo - Matematica vettorialeEsercitati da solo: Compilatore Lua online