coroutine create & resume
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 49 sur 54.
Maintenant que vous comprenez ce que sont les coroutines, apprenons comment les créer et les exécuter concrètement en Lua.
Pour créer une coroutine, vous utilisez la fonction coroutine.create(). Cette fonction prend une fonction régulière comme argument et l'enveloppe 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 n'a pas encore commencé à s'exécuter. La fonction myTask n'a pas été appelée. Pour démarrer ou continuer réellement l'exécution d'une coroutine, vous utilisez coroutine.resume() :
coroutine.resume(co)Lorsque vous appelez resume() sur une coroutine pour la première fois, elle commence à s'exécuter depuis le début de sa fonction. Si la coroutine s'exécute jusqu'au bout sans s'interrompre, 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 en une seule fois. Dans la prochaine leçon, vous apprendrez comment mettre les coroutines en pause au milieu de l'exécution.
Défi
FacileÉcrivez une fonction runSimpleCoroutine qui prend un message et renvoie la sortie d'une coroutine qui affiche ce message.
Créez une coroutine en utilisant coroutine.create() qui enveloppe une fonction affichant le message fourni. Ensuite, utilisez coroutine.resume() pour exécuter la coroutine. La fonction doit retourner le message qui a été affiché.
Logique :
- Définissez une fonction qui affiche le paramètre message
- Créez une coroutine à partir de cette fonction en utilisant
coroutine.create() - Reprenez la coroutine en utilisant
coroutine.resume() - Retournez le message qui a été affiché
Paramètres :
message(string) : Le message à afficher par la coroutine
Retourne : Le message qui a été affiché par la coroutine (string)
Aide-mémoire
Pour créer une coroutine, utilisez coroutine.create() avec une fonction comme argument :
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)Pour démarrer ou continuer l'exécution d'une coroutine, utilisez coroutine.resume() :
coroutine.resume(co)Exemple complet :
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Affiche les deux messagesLorsque resume() est appelé pour la première fois, la coroutine commence son exécution depuis le début. Si elle s'exécute jusqu'à la fin sans s'interrompre, elle ne peut plus être reprise.
Essayez vous-même
function runSimpleCoroutine(message)
-- É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 Logic & Flow
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?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 ?coroutine create & resumePause avec coroutine.yield()resume & yieldVérifier l'état d'une coroutineRécapitulatif - Générateur de nombresRécapitulatif - Calcul vectoriel