criar e retomar uma corrotina
Parte da seção Lógica e Fluxo do Journey de Lua da Coddy. Lição 49 de 54.
Agora que você entende o que são corrotinas, vamos aprender como realmente criar e executá-las em Lua.
Para criar uma corrotina, você usa a função coroutine.create(). Essa função recebe uma função comum como argumento e a envolve em um objeto de corrotina. Veja a sintaxe básica:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)Neste momento, a coroutine existe, mas ainda não começou a ser executada. A função myTask ainda não foi chamada. Para realmente iniciar ou continuar a execução de uma coroutine, você usa coroutine.resume():
coroutine.resume(co)Quando você chama resume() em uma corrotina pela primeira vez, ela começa a ser executada desde o início da função. Se a corrotina for executada até o fim sem pausar, ela é concluída e não pode ser retomada novamente.
Aqui está um exemplo completo:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- Imprime ambas as mensagensA corrotina é executada do início ao fim de uma só vez. Na próxima lição, você aprenderá a fazer com que as corrotinas pausem no meio da execução.
Desafio
FácilEscreva uma função runSimpleCoroutine que receba uma message e retorne a saída de uma corrotina que imprime essa mensagem.
Crie uma corrotina usando coroutine.create() que envolva uma função que imprime a mensagem fornecida. Em seguida, use coroutine.resume() para executar a corrotina. A função deve retornar a mensagem que foi impressa.
Lógica:
- Defina uma função que imprima o parâmetro de mensagem
- Crie uma corrotina a partir dessa função usando
coroutine.create() - Retome a corrotina usando
coroutine.resume() - Retorne a mensagem que foi impressa
Parâmetros:
message(string): A mensagem a ser impressa pela corrotina
Retorna: A mensagem que foi impressa pela corrotina (string)
Experimente você mesmo
function runSimpleCoroutine(message)
-- 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