从纯Lua创建新的空用户数据
我想我在Lua中看到了一个本机函数,它可以返回一个新的userdata。它存在吗?是否可以从普通Lua脚本创建自定义用户数据?实际上,在纯Lua中,不可以 提供userdata类型是为了允许将任意C数据存储在Lua变量中…只能通过C API在Lua中创建或修改用户数据值。这保证了宿主程序拥有的数据的完整性从纯Lua创建新的空用户数据,lua,lua-userdata,Lua,Lua Userdata,我想我在Lua中看到了一个本机函数,它可以返回一个新的userdata。它存在吗?是否可以从普通Lua脚本创建自定义用户数据?实际上,在纯Lua中,不可以 提供userdata类型是为了允许将任意C数据存储在Lua变量中…只能通过C API在Lua中创建或修改用户数据值。这保证了宿主程序拥有的数据的完整性 若您将luaVM嵌入到宿主C/C++应用程序中,您可以导出一些函数来创建用户数据到Lua,但这不是一个好的实践。UD被设计成Lua脚本的黑盒。您可能会想到newproxy 发件人: newp
若您将luaVM嵌入到宿主C/C++应用程序中,您可以导出一些函数来创建用户数据到Lua,但这不是一个好的实践。UD被设计成Lua脚本的黑盒。您可能会想到
newproxy
发件人:
newproxy
是Lua库中不受支持且未记录的函数
图书馆。在Lua代码中,只能使用setmetatable
函数
在表类型的对象上。newproxy
函数绕过了这一点
通过创建零大小的userdata并设置新的,
在其上清空元表或使用另一个newproxy的元表
例如。然后,我们可以自由地修改Lua中的元表。这是
从Lua创建代理对象的唯一方法是
元方法,例如\uu len
它对于\uu gc
元方法也很有用,当newproxy
实例变得空闲时,它可以作为一种获取回调的手段
此功能在Lua5.1中出现,但在5.2中删除。在Lua5.2中,\uu gc
元方法可以在零大小的表上设置,因此newproxy
的主要推动力消失了