/ / C ++ですべてのLuaグローバル変数をループする[複製]-c ++、lua、global-variables、lua-5.2

C ++ですべてのLuaグローバル変数をループする[duplicate] - c ++、lua、グローバル変数、lua-5.2

かなり長い間探していましたが、C ++からすべてのグローバル変数を取得する方法が見つかりませんでした。この小さなLuaテストスクリプトを検討してください。

myGlobal1 = "Global 1"
myGlobal2 = 2

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

test()

実行を一時停止するとします print (myGlobal1,myGlobal2,l1) C ++からすべてのグローバル変数(myGlobal1 そして myGlobal2)。これらの例は任意であり、C ++の観点から見たグローバル変数は不明です。

私は見ている lua_getglobal() しかし、私は最初に変数の名前を知る必要があります。私は見た lua_getupvalue() しかし、「_ENV"結果として。

使えると思う lua_getglobal() それらの名前がわかり次第、グローバル変数のリストを(C ++から)取得するにはどうすればよいですか?私は持っています lua_Debug この時点での構造(何らかの助けがある場合)

EDIT この投稿は、「テーブルを反復処理することに関するものではなく、ユーザー自身のグローバルを見つける方法に関するものでした」。

しかし、私はこれを行う方法の解決策を投稿しました ここに.

回答:

回答№1は8

さて、解決しました。

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() キー名がポップされたエントリをこれ以上見つけることができず、テーブルはtop(-1)のままになります。

次の問題は、自分のグローバルを残りのテーブルエントリと区別することです...