Menu
Coddy logo textTech

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)
challenge icon

Sfida

Facile

Scrivi 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
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Lua online