让我简单一点。
我有多个测试要运行,每次测试后我都会使用package.loaded [] = nil清除当前测试的所有要求。
问题是我们从全局命名空间中删除了所需的文件,我看到这些文件完成的ffi.cdef保持不变,当我确实需要agian时,它会抛出一个错误,因为“尝试重新定义''”
我们有什么方法可以清除加载的cdef吗?或者可以检索加载的cdef,以便我可以保存旧的cdef并在测试完成后恢复?或者还有其他方法我可以做同样的任务吗?
我只是在寻找像ffi.uncdef这样的东西。
答案 0 :(得分:1)
没有这样的功能,并且有充分的理由。
首先,设置package.loaded[pkg] = nil
不是卸载模块的官方方式,尤其是C代码。 See one of my previous answers。另外,卸载cdef并不那么简单;如果你卸载一个使用它的对象的cdef会怎么样?
测试运行cdef的代码的唯一方法是为每个测试创建一个新的lua_State
或luajit进程。
(另外,它是Lua, not LUA)