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 для каждого теста.
(Кроме того, это Луа, а не Луа)