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 coroutineLorsque 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.
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
initialMessageet 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
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
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() contre ipairs()Récapitulatif - Fiche de personnage2Fonctions supplémentaires de la bibliothèque table
table.concat()construction de tables et unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des meilleurs scores3Concepts avancés des fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu’est-ce qu’une fermeture ?Récapitulatif - Gestionnaire d’événements simpleEntraînez-vous par vous-même : Compilateur Lua en ligne