LUA FFI: попытка переопределить ошибку при выполнении нескольких ffi.cdef

Позвольте мне сделать это просто.

У меня есть несколько тестов, и после каждого теста я очищаю все требования, сделанные текущим тестом, используя package.loaded[] = nil.

Проблема в том, что, хотя мы удаляем необходимые файлы из глобального пространства имен, я вижу, что файл ffi.cdef, созданный этими файлами, остается неизменным, и когда мне требуется agian, он выдает ошибку как "попытка переопределить"

Есть ли у нас какой-либо метод, с помощью которого мы можем очистить загруженный cdef? или можно получить загруженный cdef, чтобы я мог сохранить старый cdef и восстановить его после завершения теста? Или есть какой-нибудь другой способ, которым я могу сделать ту же задачу?

Я просто ищу что-то вроде ffi.uncdef.

1 ответ

Решение

Там нет такой функции, и не зря.

Прежде всего, настройка package.loaded[pkg] = nil не является официальным способом выгрузки модуля, особенно кода Си. Смотрите один из моих предыдущих ответов. Кроме того, выгрузка cdefs не так проста; что произойдет, если вы выгрузите cdef, в котором есть объекты, использующие его?

Единственный способ проверить код, который запускает cdefs, это создать новый lua_State или процесс luajit для каждого теста.

(Кроме того, это Луа, а не Луа)

Другие вопросы по тегам