Funcțiile în Lua sunt valori de prim rang (First-Class Values). O funcție poate fi salvată într-o variabilă locală, pasată ca parametru către alte funcții sau returnată dintr-o funcție părinte. Atunci când o funcție internă accesează variabile locale din funcția exterioară (numite upvalues), ea formează o închidere lexicală (Closure).
Închideri lexicale și generatoare de contoare private
-- Generator de contoare cu stare privată încapsulată:
local function creeazaContor(valoareInitiala)
local contor = valoareInitiala or 0 -- variabilă locală privată (upvalue)
return function(pas)
pas = pas or 1
contor = contor + pas
return contor
end
end
local contorA = creeazaContor(10)
print(contorA()) -- 11
print(contorA(5)) -- 16
local contorB = creeazaContor(100)
print(contorB()) -- 101 (starea este complet independentă de contorA!)
-- Funcție cu număr variabil de parametri (Variadic function):
local function insumeaza(...)
local total = 0
-- Împachetăm argumentele într-un tabel sau iterăm prin select():
for _, numar in ipairs({...}) do
total = total + numar
end
return total
end
print("Suma numerelor este:", insumeaza(10, 20, 30, 40)) -- 100