Было бы.
Lua Registry - это просто таблица.Никакой магии здесь.
Итак, ваш код примерно эквивалентен следующему (за исключением того, как lua_ref
работает с индексами):
local t = { }
local index = #_R + 1 -- Assume that fictional _R is registry
_R[index] = t
_G["test"] = t -- Non-fictional _G is a global environment
_R[index] = nil
Также обратите внимание, что ваш пример не делаетмного смысла.(Я предполагаю, что это слишком упрощено.) Вам не нужно помещать таблицу в реестр, прежде чем сохранять ее как глобальную переменную.
Чтобы ваша таблица без ссылок была уничтожена, вам нужно, чтобы GC включил ее.Он не может запустить между lua_newtable
и lua_setglobal
, если вы вызываете их один за другим, не возвращая контроль над Lua между ними.До тех пор, пока вы не вернете контроль Lua, на вашу таблицу "ссылаются" в стеке Lua.