coroutine create & resume
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 49 von 54.
Nachdem Sie nun verstanden haben, was Coroutinen sind, lernen wir nun, wie man sie in Lua tatsächlich erstellt und ausführt.
Um eine Coroutine zu erstellen, verwenden Sie die Funktion coroutine.create(). Diese Funktion nimmt eine reguläre Funktion als Argument entgegen und verpackt sie in ein Coroutine-Objekt. Hier ist die grundlegende Syntax:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)An diesem Punkt existiert die Coroutine, hat aber noch nicht mit der Ausführung begonnen. Die Funktion myTask wurde noch nicht aufgerufen. Um die Ausführung einer Coroutine tatsächlich zu starten oder fortzusetzen, verwenden Sie coroutine.resume():
coroutine.resume(co)Wenn Sie resume() zum ersten Mal für eine Coroutine aufrufen, beginnt sie mit der Ausführung am Anfang ihrer Funktion. Wenn die Coroutine ohne Unterbrechung bis zum Ende durchläuft, ist 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 von Anfang bis Ende durch. In der nächsten Lektion lernst du, wie du Coroutinen mitten in der Ausführung pausieren lassen kannst.
Aufgabe
EinfachSchreiben Sie eine Funktion runSimpleCoroutine, die eine message entgegennimmt und die Ausgabe einer Coroutine zurückgibt, die diese Nachricht ausgibt.
Erstellen Sie eine Coroutine mit coroutine.create(), die eine Funktion umschließt, welche die bereitgestellte Nachricht ausgibt. Verwenden Sie dann coroutine.resume(), um die Coroutine auszuführen. Die Funktion sollte die Nachricht zurückgeben, die ausgegeben wurde.
Logik:
- Definieren Sie eine Funktion, die den Parameter message ausgibt
- Erstellen Sie eine Coroutine aus dieser Funktion mit
coroutine.create() - Setzen Sie die Coroutine mit
coroutine.resume()fort - Geben Sie die Nachricht zurück, die ausgegeben wurde
Parameter:
message(string): Die Nachricht, die von der Coroutine ausgegeben werden soll
Rückgabewert: Die Nachricht, die von der Coroutine ausgegeben wurde (string)
Spickzettel
Um eine Coroutine zu erstellen, verwenden Sie coroutine.create() mit einer Funktion als Argument:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)Um die Ausführung einer Coroutine zu starten oder fortzusetzen, verwenden Sie coroutine.resume():
coroutine.resume(co)Vollständiges Beispiel:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Gibt beide Nachrichten ausWenn resume() zum ersten Mal aufgerufen wird, beginnt die Coroutine mit der Ausführung von Anfang an. Wenn sie ohne Unterbrechung bis zum Ende durchläuft, kann sie nicht erneut fortgesetzt werden.
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 Logic & Flow
1Fortgeschrittene Table-Iteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen4Einführung in Metatables
Was ist eine Metatable?setmetatable & getmetatableDie __index-MetamethodeDie __newindex-MetamethodeDie __tostring-MetamethodeArithmetische Metamethoden Teil 1Arithmetische Metamethoden Teil 2Zusammenfassung – Schreibgeschützte Tabellen7Fortgeschrittene String-Manipulation
string.gsub() für ErsetzungenEinführung in String-Patternsstring.find()string.match()Iterieren mit string.gmatch()Rückblick – Log-File-Parser2Weitere Funktionen der Table-Bibliothek
table.concat()Tabellenerstellung & unpack()table.sort()Benutzerdefiniertes Sortieren mit FunktionenRückblick – Highscore-Tabelle3Fortgeschrittene Funktionskonzepte
Mehrere RückgabewerteVariadische Funktionen (...)Funktionen als First-Class ValuesAnonyme FunktionenWas ist eine Closure?Zusammenfassung – Einfacher Event Handler6Fehlerbehandlung
Die error()-FunktionGeschützte Aufrufe mit pcall()Zusammenfassung – Sichere Division9Coroutines für Anfänger
Was ist eine Coroutine?coroutine create & resumePausieren mit coroutine.yield()resume & yieldCoroutine-Status prüfenWiederholung – ZahlengeneratorWiederholung – Vektormathematik