1

让我简单点。

我有多个测试要运行,每次测试后我都会使用 package.loaded[] = nil 清除当前测试的所有要求。

问题是虽然我们从全局命名空间中删除了所需的文件,但我看到这些文件完成的 ffi.cdef 保持不变,当我确实需要 agian 时,它会引发错误,因为“尝试重新定义 ''”

我们有什么方法可以清除加载的 cdef 吗?或者可以检索加载的 cdef,以便我可以保存旧的 cdef 并在测试完成后恢复?或者有没有其他方法可以完成相同的任务?

我只是在寻找类似 ffi.uncdef 的东西。

4

1 回答 1

1

没有这样的功能,这是有充分理由的。

首先,设置package.loaded[pkg] = nil不是卸载模块官方方式,尤其是 C 代码。请参阅我以前的答案之一。此外,卸载 cdefs 也不是那么简单;如果你卸载一个有使用它的对象的 cdef 会发生什么?

测试运行 cdefs 的代码的唯一方法是lua_State为每个测试创建一个新的或 luajit 进程。

(另外,它是Lua,而不是 LUA

于 2014-05-09T00:46:50.633 回答