Menu
Coddy logo textTech

Comprobar el estado de la corrutina

Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 52 de 54.

A medida que trabajas con corrutinas, a menudo necesitarás saber en qué estado se encuentra una corrutina. ¿Está ejecutándose actualmente? ¿Está pausada y esperando a ser reanudada? ¿Ha terminado de ejecutarse?

Lua proporciona la función coroutine.status() para responder a estas preguntas.

La función coroutine.status() toma una corrutina como argumento y devuelve una cadena que describe su estado actual. Hay tres estados posibles:

"suspended"La corrutina está pausada en un yield() y puede ser reanudada
"running"La corrutina se está ejecutando actualmente
"dead"La corrutina ha terminado su ejecución y no puede ser reanudada de nuevo

Así es como se 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" (pausado en yield)

coroutine.resume(co)
print(coroutine.status(co))  -- "dead" (finalizado)
challenge icon

Desafío

Fácil

Escribe una función checkCoroutineLifecycle que reciba resumeCount y devuelva una cadena que muestre el estado de una corrutina en diferentes puntos de su ciclo de vida.

Crea una corrutina que realice un yield una vez y luego finalice. Verifica y registra su estado después de la creación, después de la primera reanudación (cuando está pausada en el yield) y después de las reanudaciones posteriores basadas en resumeCount.

Lógica:

  • Crea una función que devuelva la cadena "paused" mediante yield una vez, y luego finalice
  • Envuelve esta función en una corrutina usando coroutine.create()
  • Verifica el estado inmediatamente después de la creación usando coroutine.status()
  • Reanuda la corrutina una vez y verifica su estado nuevamente
  • Reanuda la corrutina veces adicionales basadas en resumeCount - 1 (reanudaciones totales = resumeCount)
  • Verifica el estado final después de todas las reanudaciones
  • Devuelve una cadena con los tres estados en el formato: initial: [status]\\nafter first resume: [status]\\nfinal: [status]

Parámetros:

  • resumeCount (number): Número total de veces que se debe reanudar la corrutina (mínimo 1)

Devuelve: Una cadena que muestra el estado de la corrutina en tres puntos de su ciclo de vida (string). Formato: initial: suspended\nafter first resume: suspended\nfinal: dead

Hoja de referencia

La función coroutine.status() devuelve el estado actual de una corrutina como una cadena de texto.

Estados posibles:

  • "suspended" - La corrutina está pausada en un yield() y puede ser reanudada
  • "running" - La corrutina se está ejecutando actualmente
  • "dead" - La corrutina ha terminado su ejecución y no puede ser reanudada

Uso:

coroutine.status(coroutine_object)

Ejemplo:

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"

coroutine.resume(co)
print(coroutine.status(co))  -- "dead"

Pruébalo tú mismo

function checkCoroutineLifecycle(resumeCount)
    -- Escribe el código aquí
end
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow