因此,使用 Lua C API,您可以在注册表中保存一个 Lua 值并在以后检索它。有不同的方法可以做到这一点,您可以创建一个变量并将其指针用作注册表中的键,因为它始终是唯一的。您会将指针作为轻型用户数据推送。
您还可以使用 LuaL_ref(L, LUA_REGISTRYINDEX)
创建引用。一个比另一个有什么优势?什么时候用引用,什么时候用指针?
还有引用,因为它被称为引用,如果Lua垃圾收集器收集了Lua值,注册表中的值是否为nil
?如果Lua更新了Lua值,注册表中的值是否也会改变?
最佳答案
Lua 注册表只是另一个 lua 表,可以通过预定义的“特殊”索引轻松访问。我想您不需要解释 Lua 表与轻型用户数据有何不同。
只要您可以将该键存储在 C/C++ 端,您将如何索引注册表并不重要。为了您的方便,已经有函数 (luaL_ref/luaL_unref) 为您提供易于存储和移动的整数键。
关于垃圾回收——规则总是一样的。只要值存储在未标记为弱表的表中(注册表不是弱表),该值就不会被清除。您必须明确地从注册表中删除值。
改变值将遵循正常的 Lua 规则。为某些变量分配新的不可变值不会更改存储在注册表中的值,即注册表不会跟随某些变量的更新。但是更改可变值(表等)的内容是可以的,因为注册表和变量将引用相同的值。
关于c++ - 具有轻型用户数据和引用的 Lua 注册表有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40189648/