поиск слабого реестра Lua

Есть ли способ для C ссылаться на объект в Lua 5.2 так же, как вы использовали бы система ссылок за исключением того, что эти ссылки слабые и могут быть удалены сборщиком мусора в любое время? Другими словами, существует ли реестр всех текущих объектов Lua, который не влияет на счетчик ссылок на объекты?


person Paul    schedule 07.08.2012    source источник
comment
lua-users.org/wiki/WeakTablesTutorial   -  person Robert Harvey    schedule 09.08.2012


Ответы (1)


Вы можете сделать это, введя один уровень косвенности - вместо того, чтобы хранить значения непосредственно в реестре и заставлять его быть слабым, сделайте следующее:

  1. Создать таблицу
  2. Сделайте его слабым, установив метатаблицу {__mode = "v"}
  3. Сохраните эту таблицу в реестре, используя какой-то известный, но уникальный ключ
  4. Храните все объекты, которые вы хотите отслеживать, в этой таблице.
  5. Используйте эту таблицу, хранящуюся в реестре, вместо самого реестра для поиска всех ваших объектов.

Обратите внимание, что нет «отслеживания всех объектов Lua» (например, ObjectSpace в Ruby), если только вы не используете какое-то тяжелое постоянство, например Pluto. Вы можете получить доступ только к объектам, которые вы храните/отслеживаете сами.

person Michal Kottman    schedule 08.08.2012