LUA FFI:做多个 ffi.cdef 时尝试重新定义错误。

让我简单说明一下。

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

问题是,尽管我们从全局命名空间中删除了所需的文件,但我发现由这些文件执行的ffi.cdef仍然保持完整。当我再次请求时,它会抛出一个错误“attempt to redefine ''”

我们是否有任何方法可以清除已加载的cdef?或者可以检索已加载的cdef,以便我可以保存旧的cdef并在测试结束后恢复?或者是否有其他方法可以完成相同的任务?

我只是在寻找像ffi.uncdef这样的东西。

点赞
用户646619
用户646619

没有这样的函数,而且这是有充分理由的。

首先,将 package.loaded [pkg] = nil 设置为卸载模块的方法 不是 官方方式,特别是对于 C 代码。参见我的一个之前的答案。此外,卸载 cdefs 并不那么简单;如果卸载使用 cdef 的对象会发生什么呢?

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

(另外,应该是 Lua 而不是 LUA)

2014-05-09 00:46:50