Я был немного удивлен, потому что я читал ранее, что метаметод __gc
вызывается только для пользовательских данных и никогда для таблиц. (LuaFAQ: почему метаметоды __gc и __len не работают с таблицами?)
Но недавно я попробовал это и обнаружил, что это действительно работает! Попробуйте этот код с Lua 5.2.1:
do
local b = setmetatable({a = 1}, {__gc = function(self) print(self.a); end});
end
collectgarbage();
Но я нигде не могу найти список изменений для этого, поэтому я немного расстроен и боюсь его использовать.
Может быть, кто-то может подтвердить мое предположение? Или это недокументированное поведение? Лично мне было бы неплохо иметь штатный способ создания деструктора таблицы, и я буду рад, если мое наблюдение окажется верным.