轻用户数据作为表键

时间:2011-12-30 19:20:54

标签: c lua embed

我正在使用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链接,使用轻量级用户数据作为表格键很好......

1 个答案:

答案 0 :(得分:4)

用户数据和轻用户数据是Lua中的两种不同类型。您将表中的userdata作为键,然后尝试使用light userdata查找它。那不行。您需要使用相同的类型。

由于您要将net.connection创建为用户数据,因此您需要将其保存在某个地方的某个表中,以便稍后可以从C中找到它。

相关问题