我正在使用Lua / C绑定,并且对存储在lua表中的对象存在问题,这些对象是轻量级用户数据。在下面的示例中,我正在调用“myfunction'来自C的一些数据然后用于通过我的函数" net.connection(v)"分配一个新对象(在C中),它使用 lua_newuserdata()返回对象结果。我尝试将此值用作表格中的密钥' mytable'。当我打电话给我的myfunction'时,创建我的新对象并将其存储在我的表格中,它看起来很好,因为我存储在表格中的值是' print'给我。
mytable = {}
function action(obj)
print(mytable[obj])
end
function myfunction(data)
for k,v in pairs(data) do
theObj = net.connection(v)
mytable[theObj] = "test string"
print(mytable[theObj]) --Prints 'test string'
end
end
但是,在稍后的某个时间点,我想使用相同的对象指针(上面的函数' action')来查找这些数据,但总是为零。 (theObj和obj)的指针地址是相同的,当我打印出表的内容(键,值)时,表示该表包含指向我的userdata的指针和正确的值,但是当我使用参数(obj),我无法从表中检索值。在函数' action'的情况下,我用push_lightuserdata将用户数据推送到堆栈。
以这种方式使用push_lightuserdata是否有任何微妙之处可能导致此问题?
根据this链接,使用轻量级用户数据作为表格键很好......
答案 0 :(得分:4)
用户数据和轻用户数据是Lua中的两种不同类型。您将表中的userdata作为键,然后尝试使用light userdata查找它。那不行。您需要使用相同的类型。
由于您要将net.connection
创建为用户数据,因此您需要将其保存在某个地方的某个表中,以便稍后可以从C中找到它。