Menu
Coddy logo textTech

resume & yield

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

In der vorherigen Lektion haben Sie gelernt, wie eine coroutine Werte mit coroutine.yield() an den Hauptcode zurückgeben kann. Die Kommunikation kann jedoch in beide Richtungen fließen. Sie können auch Werte into eine coroutine senden, wenn Sie sie mit resume fortsetzen.

Wenn Sie coroutine.resume() mit zusätzlichen Argumenten nach dem Coroutine-Objekt aufrufen, werden diese Argumente in die Coroutine übergeben. Innerhalb der Coroutine werden diese Werte zu den Rückgabewerten des coroutine.yield()-Aufrufs, 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 das zweite Mal fortgesetzt wird, wird der String "Hello" übergeben und wird zum Rückgabewert von coroutine.yield(), der in der Variable value gespeichert wird.

challenge icon

Aufgabe

Einfach

Schreiben Sie eine Funktion createEchoCoroutine, die initialMessage entgegennimmt und einen String zurückgibt, der die Zwei-Wege-Kommunikation zwischen dem Hauptcode und einer Coroutine zeigt.

Erstellen Sie eine Coroutine, die zuerst die initialMessage mit yield zurückgibt, dann eine Antwort beim Fortsetzen (resume) empfängt und schließlich diese Antwort mit yield zurückgibt. Die Funktion soll das Übergeben von Werten sowohl aus der Coroutine heraus als auch in die Coroutine hinein demonstrieren.

Logik:

  • Erstellen Sie eine Funktion, die initialMessage mittels yield zurückgibt und den Rückgabewert dieses Yields speichert
  • Nachdem der Wert empfangen wurde, geben Sie ihn erneut mittels yield zurück
  • Hüllen Sie diese Funktion unter Verwendung von coroutine.create() in eine Coroutine ein
  • Setzen Sie die Coroutine das erste Mal fort, um die anfängliche Nachricht zu erhalten
  • Setzen Sie die Coroutine ein zweites Mal fort und übergeben Sie "Response"
  • Fangen Sie den Wert ab, der beim zweiten Fortsetzen zurückgegeben wurde
  • Geben Sie einen String im folgenden Format zurück: First: [first_yield]\nSecond: [second_yield]

Parameter:

  • initialMessage (string): Die Nachricht, die die Coroutine zuerst mit yield zurückgibt

Rückgabe: Ein String, der beide geforderten Werte durch einen Zeilenumbruch getrennt anzeigt (string). 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