首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轻量userdata作为表键

轻量userdata作为表键
EN

Stack Overflow用户
提问于 2011-12-31 03:20:54
回答 1查看 1.5K关注 0票数 1

我正在使用Lua/C绑定,并且存储在lua表中的对象是轻型用户数据,我遇到了一个问题。在下面的示例中,我使用一些数据从C调用'myfunction‘,然后使用我的函数"net.connection(v)“分配一个新对象(在C中),该函数使用lua_newuserdata()返回对象结果。我尝试使用这个值作为表'mytable‘的关键字。当我调用'myfunction',创建我的新对象,并将其存储在我的表中时,它看起来很好,因为我存储到表中的值就是'print‘给我的。

代码语言:javascript
复制
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‘)来查找此数据,但总是得到nil。(theObj和obj)的指针地址是相同的,当我打印表的内容(键、值)时,表似乎同时包含指向我的用户数据的指针和正确的值,但是当我使用参数(obj)时,我无法从表中检索值。在函数'action‘的情况下,我使用push_lightuserdata将用户数据推送到堆栈上。

以这种方式使用push_lightuserdata是否有任何可能导致此问题的微妙之处?

根据this link,使用轻型用户数据作为表键是可以的…

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-31 11:21:33

在Lua中,Userdata和light userdata是两种截然不同的类型。您正在将一个userdata作为键放在表中,然后尝试使用一个轻量级的userdata来查找它。那行不通的。您需要使用相同的类型。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8683144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档