créer et reprendre une coroutine
Fait partie de la section Logique et flux du Journey Lua de Coddy. Leçon 49 sur 54.
Maintenant que tu comprends ce que sont les coroutines, apprenons à les créer et à les exécuter réellement en Lua.
Pour créer une coroutine, vous utilisez la fonction coroutine.create(). Cette fonction prend une fonction ordinaire comme argument et l’encapsule dans un objet coroutine. Voici la syntaxe de base :
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)À ce stade, la coroutine existe, mais elle n’a pas encore commencé à s’exécuter. La fonction myTask n’a pas été appelée. Pour réellement démarrer ou poursuivre l’exécution d’une coroutine, utilisez coroutine.resume() :
coroutine.resume(co)Lorsque vous appelez resume() sur une coroutine pour la première fois, elle commence son exécution au début de sa fonction. Si la coroutine s’exécute entièrement sans se mettre en pause, elle se termine et ne peut plus être reprise.
Voici un exemple complet :
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Affiche les deux messagesLa coroutine s’exécute du début à la fin d’une seule traite. Dans la prochaine leçon, tu apprendras à faire une pause aux coroutines au milieu de leur exécution.
Défi
FacileÉcris une fonction runSimpleCoroutine qui prend un message et renvoie la sortie d’une coroutine qui affiche ce message.
Crée une coroutine à l’aide de coroutine.create() qui encapsule une fonction affichant le message fourni. Utilise ensuite coroutine.resume() pour exécuter la coroutine. La fonction doit renvoyer le message qui a été affiché.
Logique :
- Définir une fonction qui affiche le paramètre message
- Créer une coroutine à partir de cette fonction à l’aide de
coroutine.create() - Reprendre la coroutine à l’aide de
coroutine.resume() - Renvoyer le message qui a été affiché
Paramètres :
message(chaîne de caractères) : le message à afficher par la coroutine
Renvoie : le message qui a été affiché par la coroutine (chaîne de caractères)
Essayez vous-même
function runSimpleCoroutine(message)
-- Écrire 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 simple6Gestion des erreurs
La fonction error()Appels protégés avec pcall()Récapitulatif - Division sécurisée9Les coroutines pour débutants
Qu’est-ce qu’une coroutine ?créer et reprendre une coroutineMettre en pause avec coroutine.yield()reprendre et céderVérifier l’état d’une coroutineRécapitulatif - Générateur de nombresRécapitulatif - Calcul vectorielEntraînez-vous par vous-même : Compilateur Lua en ligne