3

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

我设法为表实现了这一点,但现在我被存储在用户数据中的变量困住了。例如,我有这个 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似乎是隐藏的,因为AvatarLUA_TUSERDATA.

有谁知道如何检测已添加到 Lua 中的用户数据的变量?

4

1 回答 1

2

没有“存储在用户数据中的变量”之类的东西,至少就 Lua 而言不是。从 Lua 的角度来看,userdata 是一个巨大的黑匣子。Avatar.testVar = 5所做的只是__newindexAvatar字符串testVar和新值15调用元方法。您的 C++ 元方法(因为只有 C++ 代码可以将元方法放在用户数据上)如何解释这完全取决于您的代码。

所以它不能从 Lua 完成。您的代码将需要提供调试挂钩。Lua 5.2 允许你实现__pairsand__ipairs元方法,pairsandipairs函数可以用来迭代你的值。除此之外,您可以自行查询用户数据中存在和不存在的内容。

于 2013-07-27T21:07:14.990 回答