Verificando o status da corrotina
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 coroutine como argumento e retorna uma string que descreve seu estado atual. Há três estados possíveis:
| "suspended" | A coroutine está pausada em um yield() e pode ser retomada |
| "running" | A coroutine está sendo executada no momento |
| "dead" | A coroutine terminou sua 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)Desafio
FácilEscreva uma função checkCoroutineLifecycle que recebe resumeCount e retorna uma string mostrando o status de uma coroutine em diferentes pontos do seu ciclo de vida.
Crie uma coroutine que produz um valor uma vez e depois é concluída. Verifique e registre seu status após a criação, após a primeira retomada (quando estiver pausada em yield) e após as retomadas subsequentes com base em resumeCount.
Lógica:
- Crie uma função que produza a string
"paused"uma vez e depois seja concluída - Envolva essa função em uma coroutine usando
coroutine.create() - Verifique o status imediatamente após a criação usando
coroutine.status() - Retome a coroutine uma vez e verifique seu status novamente
- Retome a coroutine vezes adicionais com base em
resumeCount - 1(total de retomadas = resumeCount) - Verifique o status final após todas as retomadas
- Retorne uma string com os três status no formato:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
Parâmetros:
resumeCount(número): Número total de vezes para retomar a coroutine (mínimo 1)
Retorna: Uma string mostrando o status da coroutine em três pontos do 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
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
1Iteração avançada de tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de personagem2Mais funções da biblioteca table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRevisão - Placar de pontuações máximas3Conceitos Avançados de Funções
Retornando Múltiplos ValoresFunções Variádicas (...)Funções como Valores de Primeira ClasseFunções AnônimasO que é um Closure?Recapitulação - Manipulador de Eventos Simples9Corrotinas para iniciantes
O que é uma corrotina?criar e retomar uma corrotinaPausando com coroutine.yield()resume e yieldVerificando o status da corrotinaRecapitulação - Gerador de númerosRecapitulação - Matemática vetorialPratique por conta própria: Compilador de Lua online