かなり長い間探していましたが、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)のままになります。
次の問題は、自分のグローバルを残りのテーブルエントリと区別することです...