Lua 5.4 a introdus variabilele marcate cu atributul <close>, oferind un mecanism de curățare deterministică la ieșirea din blocul lexical (similare cu defer din Go sau using din C#).
local function creeazaFisierTemporar()
local mt = {
__close = function(self, err)
if err then
print("Curățare resursă din cauza unei erori: " .. tostring(err))
else
print("Curățare normală la ieșirea din bloc.")
end
end
}
return setmetatable({}, mt)
end
local function proceseaza()
local resursa = creeazaFisierTemporar()
print("Execut operațiuni critice...")
-- La ieșirea din funcție (chiar și prin 'return' sau eroare), __close se apelează garantat!
end
proceseaza()
Avantaj major: Elimină riscul scurgerilor de descriptori de fișiere sau conexiuni de rețea dacă o funcție este întreruptă prematur de o excepție.
Întrebări & Exemple de Cod:
Metametoda __close și Atributul <close> în Lua 5.4: Gestionare DeterministicăAi o nelămurire despre utilizarea comenzii
Metametoda __close și Atributul <close> în Lua 5.4: Gestionare Deterministicăsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.