因此,使用 Lua C API,您可以在注册表中保存 Lua 值并在以后检索它。有不同的方法可以做到这一点,您可以创建一个变量并使用它的指针作为注册表中的键,因为它始终是唯一的。您可以将指针作为轻用户数据推送。
您还可以使用创建参考LuaL_ref(L, LUA_REGISTRYINDEX)
。其中一种相对于另一种有什么优势?什么时候使用引用,什么时候使用指针?
还有引用,既然叫引用,那么如果Lua垃圾收集器收集到Lua值,注册表中的值会是nil
?如果Lua更新了Lua值,注册表中的值是否也会改变呢?
Lua 注册表只是另一个 lua 表,可以通过预定义的“特殊”索引轻松访问。我想你不需要解释 Lua 表与轻量级用户数据有何不同。
只要您可以将该密钥存储在 C/C++ 端,如何索引注册表并不重要。为了您的方便,已经有函数(luaL_ref/luaL_unref)为您提供易于存储和移动的整数密钥。
关于垃圾收集 - 规则始终相同。只要值存储在未标记为弱表的表中(注册表不是弱表),该值就不会被清除。您必须从注册表中显式删除值。
改变值将遵循正常的 Lua 规则。为某些变量分配新的不可变值不会更改存储在注册表中的值,即注册表不会跟随某些变量的更新。但是更改可变值(表等)的内容是可以的,因为注册表和变量将引用相同的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)