6

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

myGlobal1 = "Global 1"
myGlobal2 = 2

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

test()

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

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

我想我可以lua_getglobal()在知道它们的名称后立即使用,但是如何获取全局变量列表(来自 C++)?我现在确实有lua_Debug结构(如果有帮助的话)

编辑 这篇文章最初不是关于遍历表,而是关于如何找到用户自己的全局变量。

但是,我在此处发布了如何做到这一点的解决方案。

4

1 回答 1

10

好的,我解决了。

lua_pushglobaltable(L);       // Get global table
lua_pushnil(L);               // put a nil key on stack
while (lua_next(L,-2) != 0) { // key(-1) is replaced by the next key(-1) in table(-2)
  name = lua_tostring(L,-2);  // Get key(-2) name
  lua_pop(L,1);               // remove value(-1), now key on top at(-1)
}
lua_pop(L,1);                 // remove global table(-1)

lua_next()找不到更多条目时,会弹出键名,将表格留在顶部(-1)。

下一个问题是将我自己的全局变量与其他表条目区分开来......

于 2013-12-11T17:08:49.977 回答