Menu
Coddy logo textTech

resume y yield

Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy. Lección 51 de 54.

En la lección anterior, aprendiste cómo una corrutina puede pasar valores de vuelta al código principal mediante coroutine.yield(). Pero la comunicación puede fluir en ambas direcciones. También puedes enviar valores a una corrutina cuando la reanudas.

Cuando llamas a coroutine.resume() con argumentos adicionales después del objeto de la corrutina, esos argumentos se pasan a la corrutina. Dentro de la corrutina, estos valores se convierten en los valores de retorno de la llamada a coroutine.yield() que la pausó.

Así es como funciona:

function receiver()
    print("Coroutine started")
    local value = coroutine.yield()
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Inicia y se pausa en yield
coroutine.resume(co, "Hello")  -- Pasa "Hello" a la corrutina

Cuando la corrutina se reanuda por segunda vez, se le pasa la cadena "Hello", que se convierte en el valor de retorno de coroutine.yield() y se almacena en la variable value.

challenge icon

Desafío

Fácil

Escribe una función createEchoCoroutine que tome initialMessage y devuelva una cadena que muestre la comunicación bidireccional entre el código principal y una corrutina.

Crea una corrutina que primero produzca el initialMessage mediante yield, después reciba una respuesta al ser reanudada, y finalmente devuelva esa respuesta mediante yield. La función debe demostrar el paso de valores tanto hacia afuera como hacia adentro de la corrutina.

Lógica:

  • Crea una función que produzca initialMessage con yield y almacene el valor devuelto por ese yield
  • Después de recibir el valor, devuélvelo de nuevo hacia afuera mediante yield
  • Envuelve esta función en una corrutina usando coroutine.create()
  • Reanuda la corrutina la primera vez para obtener el mensaje inicial
  • Reanuda la corrutina por segunda vez, pasando "Response"
  • Captura el valor producido mediante yield de la segunda reanudación
  • Devuelve una cadena con el formato: First: [first_yield]\nSecond: [second_yield]

Parámetros:

  • initialMessage (string): El mensaje que la corrutina devolverá primero mediante yield

Devuelve: Una cadena que muestra ambos valores devueltos mediante yield separados por un salto de línea (string). Formato: First: Hello\nSecond: Response

Pruébalo tú mismo

function createEchoCoroutine(initialMessage)
    -- Escribe 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 Lógica y flujo de control

Practica por tu cuenta: Compilador de Lua online