我正在开发一个用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; }"
}
Application
,Avatar
和Physics
是在C ++中创建的对象。然而,在上面的脚本中创建了两个testVars
。
Elements
是一个表格,因此我可以列出所有元素,但Avatar.testVar
似乎已被隐藏,因为Avatar
是LUA_TUSERDATA
。
有没有人知道如何检测已添加到Lua中的userdata的变量?
答案 0 :(得分:2)
没有“存储在userdata中的变量”这样的东西,至少,就Lua而言,并非如此。从Lua的角度来看,userdata是一个巨大的黑盒子。所有Avatar.testVar = 5
所做的就是使用字符串__newindex
和新值Avatar
调用testVar
中的元方法15
。你的C ++元方法(因为只有C ++代码可以将元方法放在userdata上)解释这是完全直到你的代码。
所以Lua无法做到。您的代码需要提供调试挂钩。 Lua 5.2允许您实现__pairs
和__ipairs
元方法,pairs
和ipairs
函数可用于迭代您的值。除此之外,您可以自己查询用户数据中存在和不存在的内容。