轻量用户数据作为表键。

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

但是,在以后的某个时间点,我想使用相同的对象指针查找这些数据(上面的“操作”函数),但始终得到'nil'。(theObj和obj的指针地址相同,而当我打印表(键,值)的内容时,表包含对我的userdata的指针和正确的值,但是当我使用参数(obj)时,我无法从表中检索值。在'操作'函数的情况下,我使用push_lightuserdata将用户数据推送到堆栈上。

在使用push_lightuserdata时,有任何微妙之处可能会导致此问题吗?

根据此链接,使用轻量级用户数据作为表键是可以的。

原文链接 https://stackoverflow.com/questions/8683144

点赞
stackoverflow用户33252
stackoverflow用户33252

UserdataLight userdata是Lua中的两种不同类型。您正在将userdata作为键放入表中,然后尝试使用light userdata查找它。那样行不通。您需要使用相同的类型。

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

2011-12-31 03:21:33