从纯Lua创建新的空userdata

时间:2014-05-11 12:04:53

标签: lua lua-userdata

我想我在Lua中看到了一个可以返回新用户数据的本地函数。它存在吗?是否可以从普通的Lua脚本创建自定义用户数据?

2 个答案:

答案 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创建或修改。这保证了主机程序拥有的数据的完整性。

link

如果在主机C / C ++应用程序中嵌入luaVM,可以导出一些函数来创建用户数据到Lua,但这不是一个好习惯。 UD被设计为Lua脚本的黑盒子。