Menu
Coddy logo textTech

reprendre et céder

Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 51 sur 54.

Dans la leçon précédente, tu as appris comment une coroutine peut transmettre des valeurs au code principal à l’aide de coroutine.yield(). Mais la communication peut circuler dans les deux sens. Tu peux également envoyer des valeurs à l’intérieur d’une coroutine lorsque tu la reprends.

Lorsque vous appelez coroutine.resume() avec des arguments supplémentaires après l’objet coroutine, ces arguments sont transmis à la coroutine. À l’intérieur de la coroutine, ces valeurs deviennent les valeurs de retour de l’appel coroutine.yield() qui l’a mise en pause.

Voici comment cela fonctionne :

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

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Démarre et se met en pause au yield
coroutine.resume(co, "Hello")  -- Passe "Hello" dans la coroutine

Lorsque la coroutine reprend pour la deuxième fois, la chaîne "Hello" est transmise et devient la valeur de retour de coroutine.yield(), qui est stockée dans la variable value.

challenge icon

Défi

Facile

Écrivez une fonction createEchoCoroutine qui prend initialMessage et renvoie une chaîne affichant la communication bidirectionnelle entre le code principal et une coroutine.

Créez une coroutine qui cède d'abord initialMessage, reçoit ensuite une réponse lorsqu'elle est reprise, puis cède finalement cette réponse. La fonction doit démontrer le passage de valeurs vers et depuis la coroutine.

Logique :

  • Créez une fonction qui cède initialMessage et stocke la valeur de retour de cette cession
  • Après avoir reçu la valeur, cédez-la à nouveau
  • Encapsulez cette fonction dans une coroutine à l'aide de coroutine.create()
  • Reprenez la coroutine une première fois pour obtenir le message initial
  • Reprenez la coroutine une deuxième fois en lui transmettant "Response"
  • Capturez la valeur cédée lors de la deuxième reprise
  • Renvoyez une chaîne au format suivant : First: [first_yield]\nSecond: [second_yield]

Paramètres :

  • initialMessage (chaîne) : le message que la coroutine cédera en premier

Renvoie : une chaîne affichant les deux valeurs cédées, séparées par un saut de ligne (chaîne). Format : First: Hello\nSecond: Response

Essayez vous-même

function createEchoCoroutine(initialMessage)
    -- Écrivez le code ici
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux

Entraînez-vous par vous-même : Compilateur Lua en ligne