В таблицах, с которыми вы столкнетесь, есть одна вещь: таблицы передаются по ссылке (если вы не делаете глубокую копию). Так что если вы делаете:
A={1,2,3}
B=A
B[1]=nil
--[[then]]
print(A[1]==nil)-- prints true.
Таким образом, наличие «новой таблицы» и «старой таблицы» требует от вас дополнительных усилий.
Либо вы делаете глубокую копию таблицы, чтобы иметь что-то в качестве ссылки (не эффективно).
Или вы сами не меняете таблицу, а используете прокси. Это делается только для одного уровня таблиц, но я думаю, что вы могли бы встроить структуру в таблицу прокси и иметь значения в реальных:
mytable={}
do
local changes={}
mt={
__index=function(t,k)
if k=="reset" then
return function()
changes={}
return true
end
elseif k=="getChanges" then
return function() return changes end
else
return mytable[k]
end
end,
__newindex=function(t,k,v)
changes[k]=v
mytable[k]=v
end
}
prox=setmetatable({},mt)
end
prox[1]=1
prox[2]=2
for k,v in pairs(prox:getChanges()) do print(k,v) end
prox:reset()
for k,v in pairs(prox:getChanges()) do print(k,v) end
Реализация этого рекурсивно может быть частью работы. Я полагаю, вам следует задать себе вопрос, не проще ли написать простую функцию, которая хранит журналы транзакций в вашей таблице.