以前読んだことがあるので、少し驚いています__gc
。メタメソッドはユーザーデータに対してのみ呼び出され、テーブルに対しては呼び出されません。(LuaFAQ:__gcおよび__lenメタメソッドがテーブルで機能しないのはなぜですか?)
しかし、最近、私はそれを試してみて、それが実際に機能することを発見しました!Lua5.2.1でこのコードを試してください。
do
local b = setmetatable({a = 1}, {__gc = function(self) print(self.a); end});
end
collectgarbage();
しかし、この変更ログはどこにも見つからないので、少しイライラして使用することを恐れています。
たぶん、誰かが私の提案を証明することができますか?それとも、文書化されていない動作ですか?私の場合、テーブルデストラクタを定期的に作成する方法があると便利です。私の観察が正しければ嬉しいです。