6

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

4

2 回答 2

10

你可能在想newproxy

来自: http: //lua-users.org/wiki/HiddenFeatures

newproxy是 Lua 基础库中不受支持且未记录的函数。从 Lua 代码中,该setmetatable函数只能用于表类型的对象。该newproxy函数通过创建一个大小为零的用户数据并在其上设置一个新的空元表或使用另一个newproxy 实例的元表来规避该限制。然后我们可以自由地从 Lua 修改元表。这是从 Lua 创建代理对象的唯一方法,它尊重某些元方法,例如__len.

它对元方法也很有用,作为一种在实例空闲__gc时获取回调的技巧。newproxy

此功能在 Lua 5.1 中存在,但在 5.2 中被删除。在 Lua 5.2 中,__gc元方法可以设置在零大小的表上,因此主要的推动力newproxy消失了。

于 2014-05-11T14:11:15.373 回答
2

实际上没有,在纯 Lua 中。

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

关联

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

于 2014-05-11T12:08:24.947 回答