Verificare lo stato della coroutine
Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 52 di 54.
Mentre lavori con le coroutine, spesso avrai bisogno di sapere in che stato si trova una coroutine. È attualmente in esecuzione? È in pausa e in attesa di essere ripresa? Ha terminato l'esecuzione?
Lua fornisce la funzione coroutine.status() per rispondere a queste domande.
La funzione coroutine.status() accetta una coroutine come argomento e restituisce una stringa che ne descrive lo stato attuale. Ci sono tre stati possibili:
| "suspended" | La coroutine è in pausa su un yield() e può essere ripresa |
| "running" | La coroutine è attualmente in esecuzione |
| "dead" | La coroutine ha terminato l'esecuzione e non può essere ripresa |
Ecco come si usa:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended" (in pausa a yield)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (terminata)Sfida
FacileScrivi una funzione checkCoroutineLifecycle che accetta resumeCount e restituisce una stringa che mostra lo stato di una coroutine in diversi momenti del suo ciclo di vita.
Crea una coroutine che cede una volta, poi termina. Controlla e registra il suo stato dopo la creazione, dopo la prima ripresa (quando è sospesa su yield) e dopo le riprese successive in base a resumeCount.
Logica:
- Crea una funzione che cede una volta la stringa
"paused", poi termina - Racchiudi questa funzione in una coroutine usando
coroutine.create() - Controlla lo stato subito dopo la creazione usando
coroutine.status() - Riprendi la coroutine una volta e controlla di nuovo il suo stato
- Riprendi la coroutine altre volte in base a
resumeCount - 1(riprese totali = resumeCount) - Controlla lo stato finale dopo tutte le riprese
- Restituisci una stringa con tutti e tre gli stati nel formato:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parametri:
resumeCount(numero): numero totale di volte in cui riprendere la coroutine (minimo 1)
Restituisce: Una stringa che mostra lo stato della coroutine in tre momenti del suo ciclo di vita (stringa). Formato: initial: suspended\nafter first resume: suspended\nfinal: dead
Provalo tu
function checkCoroutineLifecycle(resumeCount)
-- 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