Objetivos
Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.
- Definição e declaração
- Closure em iterador
- Escopo
Declarar parâmetros
Parâmetro com valor padrão
Checar o tipo de parâmetros
Retornar um ou mais valores
Parâmetros variáveis
Função sem retorno com return
Função local/interna
"Argumento nomeado"
"Parâmetro opcional"
Closure
Closure é uma função local, sem nome e retornada, que carrega consigo seu estado
ou contexto sendo possível acessar variáveis locais.
A declaração de uma closure em Lua é feita como na sintaxe básica abaixo:
Sintaxe:
return n nome_funcao()
--uso de variáveis locais/globais
return valor
end
Exemplo 1
function funcao() --função principal
local var = 0
print("funcao principal")
return function() --função closure
print("funcao closure")
var = var + 1
return var
end
end
--uso
closure = funcao()
print(closure())
print(closure())
print(closure())
Saída
funcao principal
funcao closure
1
funcao closure
2
funcao closure
3
Para gerar uma sequência de valores utilizada em iteradores, na closure definimos um
limite para interromper a geração da sequência dinâmica desejada. Assim, podemos usar nossa
função geradora para ser iterada pelo comando for que invoca a nossa closure a cada loop.
Exemplo 2
function funcao() --função principal
local var = 0
return function() --closure
var = var + 1
if var <=10 then
return var
end
end
end
--iteração
for valor in funcao() do
print(valor)
end
Saída
1
2
3
4
5
6
7
8
9
10
Como visto nos exemplos acima, uma closure pode acessar em seu corpo
variáveis locais da função a qual a closure está aninhada e que fazem parte seu contexto:
Exemplo 3
function funcao() --função principal/geradora
local varF = 0
return function() --função closure
local varC = 3
varF = varF*varC + 1
return varF
end
end
closure = funcao()
print(closure())
print(closure())
print(closure())
Saída
1
4
13
Variáveis globais também podem ser acessadas como pode ser observado no exemplo a
seguir em que uma variável global é utilizada na expressão de retorno da closure:
Exemplo 4
varG = 2 --global
function funcao() --função principal
local varF = 0 --local
return function() --função closure
local varC = 3 --local
varF = varF*varC + 1
return varF*varG
end
end
closure = funcao()
print(closure())
print(closure())
print(closure())
Saída
2
8
26
Histórico de atualizações
- 25/05/2025 - versão inicial - Adição: closure, 'closure com iterador' e escopo
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.