Fechamentos
Lua é uma linguagem de programação funcional com suporte total a closures. Quando uma nova função é criada, todas as variáveis locais ficam vinculadas a essa instância da função. Isso pode ser usado para criar funções de iterador, bem como para criar variáveis privadas para programação orientada a objetos.
a.function counter(i)
local x=0
return function()
x=x+1
if x > i then return null end
return x
end
end
sum=0
for i in counter(5) do
for j in counter(5) do
sum = sum + j
end
end
function newAccount(balance)
local t={}
t.deposit = function(amount)
balance = balance + amount
return balance
end
t.withdraw = function(amount)
balance = balance - amount
return balance
end
t.getBalance = function()
return balance
end
return t
end
account = newAccount(1000)
account.deposit(100)
account.withdraw(500)
balance = account.getBalance()
É mais comum usar metatabelas para criar objetos do que usar closures, mas as metatabelas não oferecem uma boa maneira de implementar a privacidade dos dados, como pode ser feito usando closures.