Funcțiile rawget și rawset permit citirea și scrierea valorilor dintr-o tabelă Lua fără a declanșa metametodele __index sau __newindex. Acest mecanism este esențial pentru evitarea buclelor infinite de recursivitate în cadrul metatabelelor personalizate.
local proxy = {}
local mt = {
__index = function(t, k)
print("Interogare cheie: " .. tostring(k))
return rawget(proxy, k) -- Previne recursivitatea infinită
end,
__newindex = function(t, k, v)
print("Modificare cheie: " .. tostring(k) .. " = " .. tostring(v))
rawset(proxy, k, v) -- Salvează direct în containerul intern
end
}
local obiect = setmetatable({}, mt)
obiect.scor = 100 -- Declanșează __newindex
print(obiect.scor) -- Declanșează __index și returnează 100
Utilizare critică: Fără rawset sau rawget, orice atribuire internă t[k] = v în interiorul metametodei ar reapela aceeași metametodă la infinit, ducând la depășirea stivei (stack overflow).
Diferențe Cheie
rawget(t, k): Returneazăt[k]ignorând orice metatabelă asociată cut.rawset(t, k, v): Seteazăt[k] = vfără a apela__newindex, returnând tabela modificată.
Întrebări & Exemple de Cod:
rawget și rawset în Lua: Acces Direct la Tabele Ocolind MetatabeleleAi o nelămurire despre utilizarea comenzii
rawget și rawset în Lua: Acces Direct la Tabele Ocolind Metatabelelesau 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.