Menu
Coddy logo textTech

Fortsetzen & yield

Teil des Abschnitts Logik & Programmablauf der Lua-Journey von Coddy. Lektion 51 von 54.

In der vorherigen Lektion hast du gelernt, wie eine Coroutine mithilfe von coroutine.yield() Werte an den Hauptcode zurückgeben kann. Aber die Kommunikation kann in beide Richtungen fließen. Du kannst auch Werte in eine Coroutine senden, wenn du sie fortsetzt.

Wenn du coroutine.resume() mit zusätzlichen Argumenten nach dem Coroutine-Objekt aufrufst, werden diese Argumente an die Coroutine übergeben. Innerhalb der Coroutine werden diese Werte zu den Rückgabewerten des Aufrufs coroutine.yield(), der sie pausiert hat.

So funktioniert es:

function receiver()
    print("Coroutine started")
    local value = coroutine.yield()
    print("Received: " .. value)
end

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Startet und pausiert bei yield
coroutine.resume(co, "Hello")  -- Übergibt "Hello" in die Coroutine

Wenn die Coroutine zum zweiten Mal fortgesetzt wird, wird die Zeichenkette "Hello" übergeben und wird zum Rückgabewert von coroutine.yield(), der in der Variablen value gespeichert wird.

challenge icon

Aufgabe

Einfach

Schreibe eine Funktion createEchoCoroutine, die initialMessage übernimmt und eine Zeichenkette zurückgibt, die die Kommunikation in beide Richtungen zwischen dem Hauptcode und einer Coroutine zeigt.

Erstelle eine Coroutine, die zuerst initialMessage zurückgibt, beim Fortsetzen eine Antwort empfängt und diese Antwort schließlich wieder zurückgibt. Die Funktion soll das Übergeben von Werten sowohl aus der Coroutine heraus als auch in die Coroutine hinein demonstrieren.

Logik:

  • Erstelle eine Funktion, die initialMessage zurückgibt und den Rückgabewert dieses Vorgangs speichert
  • Gib den Wert nach dem Empfangen wieder zurück
  • Verpacke diese Funktion mithilfe von coroutine.create() in eine Coroutine
  • Setze die Coroutine zum ersten Mal fort, um die Anfangsnachricht zu erhalten
  • Setze die Coroutine ein zweites Mal fort und übergib dabei "Response"
  • Speichere den Wert, der beim zweiten Fortsetzen zurückgegeben wird
  • Gib eine Zeichenkette im folgenden Format zurück: First: [first_yield]\nSecond: [second_yield]

Parameter:

  • initialMessage (Zeichenkette): Die Nachricht, die die Coroutine zuerst zurückgibt

Rückgabe: Eine Zeichenkette, die beide zurückgegebenen Werte durch einen Zeilenumbruch getrennt zeigt (Zeichenkette). Format: First: Hello\nSecond: Response

Probier es selbst

function createEchoCoroutine(initialMessage)
    -- Schreibe hier Code
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 Logik & Programmablauf

Übe selbstständig: Online-Lua-Compiler