从C API中访问Lua userdata中的变量。

我正在开发一个使用 Lua 作为脚本语言的 C++ 项目。为了方便调试,我们实现了一个网络调试器,它可以接收 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++ 中创建的对象。但两个 testVars 是在上面的脚本中创建的。Elements 是一个表,所以我可以列出所有元素,但 Avatar.testVar 似乎被隐藏了,因为 Avatar 是一个 LUA_TUSERDATA

有人有想法如何检测已添加到 Lua 中的 userdata 的变量吗?

点赞
用户734069
用户734069

根据Lua的观点,“存储在userdata中的变量”这样的东西根本不存在。对于Lua而言,userdata就是一个巨大的黑盒子。Avatar.testVar = 5所做的只是调用Avatar中的元方法__newindex并提供字符串testVar和新的值15。如何解释这一过程完全取决于你自己编写的C++元方法(因为只有C++代码才能给userdata加上元方法)。

因此,无法从Lua中进行此操作。你的代码需要提供调试钩子。Lua 5.2允许你实现__pairs__ipairs元方法,这些方法可以用于遍历你的值。除此之外,在userdata中查询存在或不存在的值是完全由你自己实现的。

2013-07-27 21:07:14