coroutine create y resume
Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy. Lección 49 de 54.
Ahora que entiendes qué son las corrutinas, aprendamos a crearlas y ejecutarlas realmente en Lua.
Para crear una corrutina, usas la función coroutine.create(). Esta función recibe una función normal como argumento y la envuelve en un objeto de corrutina. Esta es la sintaxis básica:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)En este punto, la corrutina existe, pero todavía no ha comenzado a ejecutarse. La función myTask no se ha llamado. Para iniciar o continuar realmente la ejecución de una corrutina, usas coroutine.resume():
coroutine.resume(co)Cuando llamas a resume() en una corrutina por primera vez, comienza a ejecutarse desde el principio de su función. Si la corrutina se ejecuta por completo sin pausarse, termina y no se puede reanudar de nuevo.
Aquí tienes un ejemplo completo:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Imprime ambos mensajesLa corrutina se ejecuta de principio a fin de una sola vez. En la próxima lección, aprenderás a hacer que las corrutinas se pausen en mitad de la ejecución.
Desafío
FácilEscribe una función runSimpleCoroutine que tome un message y devuelva la salida de una corrutina que imprime ese mensaje.
Crea una corrutina usando coroutine.create() que envuelva una función que imprime el mensaje proporcionado. Después, usa coroutine.resume() para ejecutar la corrutina. La función debe devolver el mensaje que se imprimió.
Lógica:
- Define una función que imprima el parámetro message
- Crea una corrutina a partir de esa función usando
coroutine.create() - Reanuda la corrutina usando
coroutine.resume() - Devuelve el mensaje que se imprimió
Parámetros:
message(cadena): El mensaje que imprimirá la corrutina
Devuelve: El mensaje que imprimió la corrutina (cadena)
Pruébalo tú mismo
function runSimpleCoroutine(message)
-- Escribe 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