Финализаторы необъектопривязаные

Ну, не пугайтесь заголовка! Нормально всё. Хм. Чем-то напоминает биологическое название вида, что почти правда.

Сначала введение: с помощью метатабличного метода __gc  можно задать функцию, которая будет вызвана при сборке мусора. Её и зовут финализатором. Пример: закрыть соединение при финализации сокета.

У всего этого есть одна важная особенность: финализатор привязан к таблице. А если надо финализировать всю программу? К примеру, удалить временный файл? Разумное решение: создать таблицу, на которую всегда держать ссылку. А в неё класть другие таблицы, пустые и с финализаторами.

К счастью, модуль для этой цели уже есть. Вот он:

Как работать с ним:

ФунуцияОписание
finalizers.create(name, finalizer)Принимает имя (что угодно) и финализатор (функцию), создаёт финализатор.
finalizers.delete(name)Принимает только имя (что угодно), удаляет финализатор. Примечание: если финализатора нет, сработает корректно.

Добавить комментарий