Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从纯Lua创建新的空用户数据_Lua_Lua Userdata - Fatal编程技术网

从纯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

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

实际上,在纯Lua中,不可以

提供userdata类型是为了允许将任意C数据存储在Lua变量中…只能通过C API在Lua中创建或修改用户数据值。这保证了宿主程序拥有的数据的完整性


若您将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
的主要推动力消失了