Menu
Coddy logo textTech

Verificando o Status da Coroutine

Parte da seção Lógica e Fluxo do Journey de Lua da Coddy. Lição 52 de 54.

Ao trabalhar com corrotinas, você frequentemente precisará saber em que estado uma corrotina se encontra. Ela está em execução no momento? Está pausada e aguardando para ser retomada? Ela terminou de ser executada?

Lua fornece a função coroutine.status() para responder a essas perguntas.

A função coroutine.status() recebe uma corrotina como seu argumento e retorna uma string descrevendo seu estado atual. Existem três estados possíveis:

"suspended"A corrotina está pausada em um yield() e pode ser retomada
"running"A corrotina está em execução no momento
"dead"A corrotina terminou a execução e não pode ser retomada novamente

Veja como usá-lo:

function task()
    coroutine.yield()
    print("Finishing")
end

local co = coroutine.create(task)
print(coroutine.status(co))  -- "suspended"

coroutine.resume(co)
print(coroutine.status(co))  -- "suspended" (pausado no yield)

coroutine.resume(co)
print(coroutine.status(co))  -- "dead" (finalizado)
challenge icon

Desafio

Fácil

Escreva uma função checkCoroutineLifecycle que recebe resumeCount e retorna uma string mostrando o status de uma coroutine em diferentes pontos de seu ciclo de vida.

Crie uma coroutine que faz um yield uma vez e depois termina. Verifique e registre seu status após a criação, após o primeiro resume (quando ela estiver pausada no yield) e após os resumes subsequentes baseados em resumeCount.

Lógica:

  • Crie uma função que faz o yield da string "paused" uma vez e depois termina
  • Envolva esta função em uma coroutine usando coroutine.create()
  • Verifique o status imediatamente após a criação usando coroutine.status()
  • Retome (resume) a coroutine uma vez e verifique seu status novamente
  • Retome a coroutine vezes adicionais com base em resumeCount - 1 (total de resumes = resumeCount)
  • Verifique o status final após todos os resumes
  • Retorne uma string com todos os três status no formato: initial: [status]\\nafter first resume: [status]\\nfinal: [status]

Parâmetros:

  • resumeCount (number): Número total de vezes para retomar a coroutine (mínimo 1)

Retorno: Uma string mostrando o status da coroutine em três pontos de seu ciclo de vida (string). Formato: initial: suspended\nafter first resume: suspended\nfinal: dead

Experimente você mesmo

function checkCoroutineLifecycle(resumeCount)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de Lua online