Menu
Coddy logo textTech

Coroutine-Status prüfen

Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 52 von 54.

Wenn Sie mit Coroutinen arbeiten, müssen Sie oft wissen, in welchem Zustand sich eine Coroutine befindet. Läuft sie gerade? Ist sie pausiert und wartet darauf, fortgesetzt zu werden? Ist ihre Ausführung beendet?

Lua stellt die Funktion coroutine.status() bereit, um diese Fragen zu beantworten.

Die Funktion coroutine.status() nimmt eine Coroutine als Argument entgegen und gibt einen String zurück, der 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 gerade ausgeführt
"dead"Die Coroutine hat die 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)
challenge icon

Aufgabe

Einfach

Schreiben 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

Spickzettel

Die Funktion coroutine.status() gibt den aktuellen Zustand einer Coroutine als String zurück.

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 die Ausführung beendet und kann nicht fortgesetzt werden

Verwendung:

coroutine.status(coroutine_object)

Beispiel:

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"

coroutine.resume(co)
print(coroutine.status(co))  -- "dead"

Probier es selbst

function checkCoroutineLifecycle(resumeCount)
    -- Code hier schreiben
end
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow