在C ++中循环遍历所有Lua全局变量

我已经搜索了相当长的一段时间,但我还没有找到一种从C ++获取所有全局变量的方法。考虑这个小Lua测试脚本。

` myGlobal1 =“全局1” myGlobal2 =2

function test() local l1 = 0 print(myGlobal1,myGlobal2,l1) end

测试()

`

假设您在 print(myGlobal1,myGlobal2,l1)处暂停执行,并从C ++中获取所有全局变量(myGlobal1myGlobal2)。这些示例是任意的,从C ++的角度来看,全局变量是未知的。

我一直在看 lua_getglobal(),但我需要首先知道变量的名称。我看了 lua_getupvalue(),但只得到了“ _ENV”作为结果。

我想我可以在了解它们的名称后立即使用lua_getglobal(),但是我如何获取全局变量列表(从C ++)?在这一点上,我确实有 lua_Debug结构(如果它对任何帮助)

点赞
用户365929
用户365929

好了,我解决了。

lua_pushglobaltable(L);       // 获取全局表
lua_pushnil(L);               // 在栈上放置一个 nil 键
while (lua_next(L,-2) != 0) { // 键(-1) 被表(-2) 中下一个键(-1) 替换
  name = lua_tostring(L,-2);  // 获取键(-2) 的名称
  lua_pop(L,1);               // 移除值(-1), 现在栈顶是键(-1)
}
lua_pop(L,1);                 // 移除全局表(-1)

lua_next() 找不到更多条目时,键名称被弹出,表留在栈顶(-1)。

下一个问题是区分我的全局变量和其余表条目...

2013-12-11 17:08:49