Chiusure
Lua è un linguaggio di programmazione funzionale con pieno supporto per le chiusure. Quando viene creata una nuova funzione, tutte le variabili locali vengono vincolate all'istanza della funzione. Questo può essere usato per creare funzioni iteratrici e per creare variabili private per la programmazione orientata agli oggetti.
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()
È più comune usare le metatabelle per creare oggetti che le chiusure, ma le metatabelle non forniscono un buon modo per implementare la privacy dei dati, come invece si può fare con le chiusure.