Comprobar el estado de la corrutina
Parte de la sección Lógica y flujo de control 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 reanudarse |
| "running" | La corrutina se está ejecutando actualmente |
| "dead" | La corrutina ha terminado su ejecución y no puede reanudarse 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)Desafío
FácilEscribe 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 ceda una vez y después se complete. Comprueba y registra su estado después de crearla, después de la primera reanudación (cuando está pausada en el punto de cesión) y después de las reanudaciones posteriores según resumeCount.
Lógica:
- Crea una función que ceda la cadena
"paused"una vez y después se complete - Envuelve esta función en una corrutina usando
coroutine.create() - Comprueba el estado inmediatamente después de crearla usando
coroutine.status() - Reanuda la corrutina una vez y vuelve a comprobar su estado
- Reanuda la corrutina veces adicionales según
resumeCount - 1(total de reanudaciones = resumeCount) - Comprueba 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(número): 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 (cadena). Formato: initial: suspended\nafter first resume: suspended\nfinal: dead
Pruébalo tú mismo
function checkCoroutineLifecycle(resumeCount)
-- Escribe el código aquí
end
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo de control
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas3Conceptos avanzados de funciones
Retorno de múltiples valoresFunciones variádicas (...)Funciones como valores de primera claseFunciones anónimas¿Qué es un Closure?Resumen - Manejador de eventos simple9Corrutinas para principiantes
¿Qué es una corrutina?coroutine create y resumePausar con coroutine.yield()resume y yieldComprobar el estado de la corrutinaResumen - Generador de númerosResumen - Matemática de vectoresPractica por tu cuenta: Compilador de Lua online