Menu
Coddy logo textTech

coroutine create y resume

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

Ahora que entiendes qué son las corrutinas, aprendamos cómo crearlas y ejecutarlas realmente en Lua.

Para crear una corrutina, utilizas la función coroutine.create(). Esta función toma una función regular como argumento y la envuelve en un objeto de corrutina. Aquí está la sintaxis básica:

function myTask()
    print("Hello from coroutine!")
end

local co = coroutine.create(myTask)

En este punto, la corrutina existe pero aún no ha comenzado a ejecutarse. La función myTask no ha sido llamada. Para iniciar o continuar realmente la ejecución de una corrutina, se utiliza coroutine.resume():

coroutine.resume(co)

Cuando llamas a resume() en una corrutina por primera vez, esta comienza a ejecutarse desde el principio de su función. Si la corrutina se ejecuta por completo sin pausarse, se completa y no puede ser reanudada de nuevo.

Aquí tienes un ejemplo completo:

function greet()
    print("Starting...")
    print("Finishing!")
end

local co = coroutine.create(greet)
coroutine.resume(co)  -- Imprime ambos mensajes

La corrutina se ejecuta de principio a fin de una sola vez. En la siguiente lección, aprenderás cómo hacer que las corrutinas se pausen en medio de la ejecución.

challenge icon

Desafío

Fácil

Escribe una función runSimpleCoroutine que reciba un message y devuelva la salida de una corrutina que imprime ese mensaje.

Crea una corrutina usando coroutine.create() que envuelva una función la cual imprima el mensaje proporcionado. Luego, usa coroutine.resume() para ejecutar la corrutina. La función debe devolver el mensaje que fue impreso.

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 fue impreso

Parámetros:

  • message (string): El mensaje que será impreso por la corrutina

Devuelve: El mensaje que fue impreso por la corrutina (string)

Hoja de referencia

Para crear una corrutina, usa coroutine.create() con una función como su argumento:

function myTask()
    print("Hello from coroutine!")
end

local co = coroutine.create(myTask)

Para iniciar o continuar la ejecución de una corrutina, usa coroutine.resume():

coroutine.resume(co)

Ejemplo completo:

function greet()
    print("Starting...")
    print("Finishing!")
end

local co = coroutine.create(greet)
coroutine.resume(co)  -- Imprime ambos mensajes

Cuando se llama a resume() por primera vez, la corrutina comienza a ejecutarse desde el principio. Si se ejecuta hasta completarse sin pausarse, no se puede reanudar de nuevo.

Pruébalo tú mismo

function runSimpleCoroutine(message)
    -- 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