如何将一个表格的参考对象添加到用户数据对象中?

我有一个在lua中接收userdata对象的函数。

function Class:AttachToUserdataObject(userdataObject)
  userDataObject.tableAttached = self
end

但是后来,当我再次使用相同的userdata对象时,我无法找到它 -userdataObject.tableAttached为空。我觉得我还没有完全理解userdata对象的工作方式。

除了创建具有所有userdata对象id(它们具有唯一id)和表引用的全局表之外,是否有其他方法将对象绑定到userdata对象上?

我希望保持尽可能优雅,但是如果没有访问C ++代码,我想我可以放弃一些优雅,只要它可以工作。

点赞
用户102441
用户102441

你可以使用一个弱表作为后备:

local _data = setmetatable({}, {__mode='k'})

function Class:AttachToUserdataObject(userdataObject)
    _data[userDataObject] = self
end
2013-05-28 23:54:20
用户2198692
用户2198692

一个userdata对象没有表格(fields),Lua对底层C对象的内部一无所知。为了实现您想要的功能,您必须处理__index__newindex元方法。

例如,在进行类似于userdataObject.tableAttached=self的赋值操作时,将触发__newindex元方法。在其中,您可以将该值存储在元表本身中(可能会出现名称冲突)或者存储在另一个表格中,该表格本身存储在元表中。

要检索数据,您必须处理__index元方法。对于userdata,这可能有点棘手,所以如果您遇到问题,请让我知道。

2013-05-29 07:16:26