Menu
Coddy logo textTech

Riprendere e sospendere

Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 51 di 54.

Nella lezione precedente, hai imparato come una coroutine possa passare valori al codice principale usando coroutine.yield(). Ma la comunicazione può fluire in entrambe le direzioni. Puoi anche inviare valori all'interno di una coroutine quando la riprendi.

Quando chiami coroutine.resume() con argomenti aggiuntivi dopo l'oggetto coroutine, questi argomenti vengono passati alla coroutine. All'interno della coroutine, questi valori diventano i valori restituiti dalla chiamata a coroutine.yield() che l'ha sospesa.

Ecco come funziona:

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

local co = coroutine.create(receiver)
coroutine.resume(co)           -- Inicia y se pausa en yield
coroutine.resume(co, "Hello")  -- Pasa "Hello" a la corrutina

Quando la coroutine riprende per la seconda volta, viene passata la stringa "Hello" e diventa il valore restituito da coroutine.yield(), che viene memorizzato nella variabile value.

challenge icon

Sfida

Facile

Scrivi una funzione createEchoCoroutine che accetta initialMessage e restituisce una stringa che mostra la comunicazione bidirezionale tra il codice principale e una coroutine.

Crea una coroutine che prima restituisce initialMessage, poi riceve una risposta quando viene ripresa e infine restituisce quella risposta. La funzione dovrebbe mostrare il passaggio di valori sia in uscita dalla coroutine sia in entrata.

Logica:

  • Crea una funzione che restituisce initialMessage e memorizza il valore restituito da tale yield
  • Dopo aver ricevuto il valore, restituiscilo con uno yield
  • Racchiudi questa funzione in una coroutine usando coroutine.create()
  • Riprendi la coroutine la prima volta per ottenere il messaggio iniziale
  • Riprendi la coroutine una seconda volta, passandole "Response"
  • Acquisisci il valore restituito con lo yield della seconda ripresa
  • Restituisci una stringa nel formato: First: [first_yield]\nSecond: [second_yield]

Parametri:

  • initialMessage (stringa): il messaggio che la coroutine restituirà per primo

Restituisce: una stringa che mostra entrambi i valori restituiti con yield, separati da un carattere di nuova riga (stringa). Formato: First: Hello\nSecond: Response

Provalo tu

function createEchoCoroutine(initialMessage)
    -- Scrivi il codice qui
end
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Lua online