我想我在Lua中看到了一个可以返回新用户数据的本地函数。它存在吗?是否可以从普通的Lua脚本创建自定义用户数据?
答案 0 :(得分:9)
您可能会想到newproxy
来自:http://lua-users.org/wiki/HiddenFeatures
newproxy
是Lua基础中不受支持和未记录的函数 图书馆。从Lua代码中,只能使用setmetatable
函数 在表类型的对象上。newproxy
函数规避了这一点 通过创建零大小的用户数据并设置新的, 空的metatable或使用另一个newproxy
的元表 实例。然后我们可以自由地修改Lua中的元数据。这是 从Lua创建代理对象的唯一方法是尊重某些代理对象 metamethods,例如__len
。
它对于__gc
元方法也很有用,因为当newproxy
实例变为空闲时,它会获得回调。
此功能在Lua 5.1中出现,但在5.2中已删除。在Lua 5.2中,可以在零大小的表上设置__gc
元方法,因此newproxy
的主要推动力消失了。
答案 1 :(得分:2)
实际上没有,纯粹的Lua。
提供类型userdata以允许任意C数据存储在Lua变量中。 ... Lua中的用户数据值无法通过C API创建或修改。这保证了主机程序拥有的数据的完整性。
如果在主机C / C ++应用程序中嵌入luaVM,可以导出一些函数来创建用户数据到Lua,但这不是一个好习惯。 UD被设计为Lua脚本的黑盒子。