Coroutine-Status prüfen
Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 52 von 54.
Wenn du mit Coroutinen arbeitest, musst du oft wissen, in welchem Zustand sich eine Coroutine befindet. Wird sie gerade ausgeführt? Ist sie pausiert und wartet darauf, fortgesetzt zu werden? Ist ihre Ausführung abgeschlossen?
Lua stellt die Funktion coroutine.status() bereit, um diese Fragen zu beantworten.
Die Funktion coroutine.status() nimmt eine Coroutine als Argument entgegen und gibt eine Zeichenkette zurück, die ihren aktuellen Zustand beschreibt. Es gibt drei mögliche Zustände:
| "suspended" | Die Coroutine ist bei einem yield() pausiert und kann fortgesetzt werden |
| "running" | Die Coroutine wird derzeit ausgeführt |
| "dead" | Die Coroutine hat ihre Ausführung beendet und kann nicht erneut fortgesetzt werden |
So wird es verwendet:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended" (pausiert bei yield)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (beendet)Aufgabe
EinfachSchreiben Sie eine Funktion checkCoroutineLifecycle, die resumeCount entgegennimmt und einen String zurückgibt, der den Status einer Coroutine an verschiedenen Punkten ihres Lebenszyklus anzeigt.
Erstellen Sie eine Coroutine, die einmal nachgibt (yield) und dann abgeschlossen wird. Überprüfen und protokollieren Sie ihren Status nach der Erstellung, nach dem ersten Fortsetzen (wenn sie bei yield pausiert ist) und nach weiteren Fortsetzungen basierend auf resumeCount.
Logik:
- Erstellen Sie eine Funktion, die den String
"paused"einmal mit yield zurückgibt und dann abgeschlossen wird - Verpacken Sie diese Funktion mit
coroutine.create()in eine Coroutine - Überprüfen Sie den Status unmittelbar nach der Erstellung mit
coroutine.status() - Setzen Sie die Coroutine einmal fort und überprüfen Sie ihren Status erneut
- Setzen Sie die Coroutine weitere Male fort, basierend auf
resumeCount - 1(Gesamtzahl der Fortsetzungen = resumeCount) - Überprüfen Sie den finalen Status nach allen Fortsetzungen
- Geben Sie einen String mit allen drei Statuswerten im folgenden Format zurück:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parameter:
resumeCount(number): Gesamtzahl der Wiederaufnahmen der Coroutine (Minimum 1)
Rückgabewert: Ein String, der den Coroutine-Status an drei Punkten seines Lebenszyklus anzeigt (string). Format: initial: suspended\nafter first resume: suspended\nfinal: dead
Probier es selbst
function checkCoroutineLifecycle(resumeCount)
-- Code hier schreiben
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmablauf
1Fortgeschrittene Tabelleniteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen2Weitere Funktionen der Tabellenbibliothek
table.concat()Tabellenkonstruktion & unpack()table.sort()Eigene Sortierung mit FunktionenRückblick – Highscore-Tabelle3Fortgeschrittene Funktionskonzepte
Mehrere Werte zurückgebenVariadische Funktionen (...)Funktionen als Werte erster KlasseAnonyme FunktionenWas ist eine Closure?Rückblick – Einfacher Event-Handler6Fehlerbehandlung
Die error()-FunktionGeschützte Aufrufe mit pcall()Zusammenfassung – Sichere Division9Coroutines für Einsteiger
Was ist eine Coroutine?Coroutine erstellen & fortsetzenPausieren mit coroutine.yield()Fortsetzen & yieldCoroutine-Status prüfenRückblick – ZahlengeneratorRückblick – VektorrechnungÜbe selbstständig: Online-Lua-Compiler