Coroutine erstellen & fortsetzen
Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 49 von 54.
Nachdem du nun verstanden hast, was coroutines sind, lernen wir, wie man sie in Lua tatsächlich erstellt und ausführt.
Um eine Coroutine zu erstellen, verwendest du die Funktion coroutine.create(). Diese Funktion nimmt eine reguläre Funktion als Argument und verpackt sie in ein Coroutine-Objekt. Hier ist die grundlegende Syntax:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)Zu diesem Zeitpunkt existiert die Coroutine, aber sie wurde noch nicht gestartet. Die Funktion myTask wurde noch nicht aufgerufen. Um die Ausführung einer Coroutine tatsächlich zu starten oder fortzusetzen, verwendest du coroutine.resume():
coroutine.resume(co)Wenn du resume() zum ersten Mal für eine Coroutine aufrufst, beginnt sie mit der Ausführung am Anfang ihrer Funktion. Wenn die Coroutine ohne Pause vollständig durchläuft, wird sie abgeschlossen und kann nicht erneut fortgesetzt werden.
Hier ist ein vollständiges Beispiel:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Gibt beide Nachrichten ausDie Coroutine läuft in einem Durchgang vom Anfang bis zum Ende. In der nächsten Lektion lernst du, wie du Coroutinen mitten in der Ausführung pausieren lässt.
Aufgabe
EinfachSchreibe eine Funktion runSimpleCoroutine, die eine message entgegennimmt und die Ausgabe einer Coroutine zurückgibt, die diese Nachricht ausgibt.
Erstelle mit coroutine.create() eine Coroutine, die eine Funktion umschließt, welche die bereitgestellte Nachricht ausgibt. Verwende anschließend coroutine.resume(), um die Coroutine auszuführen. Die Funktion sollte die ausgegebene Nachricht zurückgeben.
Logik:
- Definiere eine Funktion, die den Nachrichtenparameter ausgibt
- Erstelle aus dieser Funktion mithilfe von
coroutine.create()eine Coroutine - Setze die Coroutine mithilfe von
coroutine.resume()fort - Gib die ausgegebene Nachricht zurück
Parameter:
message(string): Die von der Coroutine auszugebende Nachricht
Rückgabewert: Die von der Coroutine ausgegebene Nachricht (string)
Probier es selbst
function runSimpleCoroutine(message)
-- Schreibe hier den Code
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