从C api访问userdata中的Lua变量

时间:2013-07-27 20:54:42

标签: c lua lua-userdata

我正在开发一个用C ++编写的项目,它使用Lua作为脚本语言。 为了便于调试,我们实现了一个网络调试器,它接收Lua代码,运行它,对Json中的返回值进行编码并将该字符串发回。

我设法为表实现了这个,但现在我被困在存储在userdata中的变量。 例如。我有这个Lua代码:

Elements.Avatar.testVar = 5

Elements.testVar = 15

return Elements    

// result
{
  "result0": "{Application:userdata; Avatar:userdata; Physics:userdata; testVar:15; }"
}

ApplicationAvatarPhysics是在C ++中创建的对象。然而,在上面的脚本中创建了两个testVarsElements是一个表格,因此我可以列出所有元素,但Avatar.testVar似乎已被隐藏,因为AvatarLUA_TUSERDATA

有没有人知道如何检测已添加到Lua中的userdata的变量?

1 个答案:

答案 0 :(得分:2)

没有“存储在userdata中的变量”这样的东西,至少,就Lua而言,并非如此。从Lua的角度来看,userdata是一个巨大的黑盒子。所有Avatar.testVar = 5所做的就是使用字符串__newindex和新值Avatar调用testVar中的元方法15。你的C ++元方法(因为只有C ++代码可以将元方法放在userdata上)解释这是完全直到你的代码。

所以Lua无法做到。您的代码需要提供调试挂钩。 Lua 5.2允许您实现__pairs__ipairs元方法,pairsipairs函数可用于迭代您的值。除此之外,您可以自己查询用户数据中存在和不存在的内容。