Frage

Ich habe ein Funktion relativ tief in einer Reihe von Tabellen verschachtelt. Gibt es eine Möglichkeit in C / C ++ eine „Referenz“ auf diese Funktion zu erhalten, und drücken Sie, dass (und args) auf den Stapel, wenn ich es brauche zu benutzen?

War es hilfreich?

Lösung

Dies ist, was das Referenzsystem ist. Der Funktionsaufruf r = luaL_ref(L, LUA_REGISTRYINDEX) speichert den Wert auf der Oberseite des Stapels in der Registrierung und gibt eine ganze Zahl, die auf der C-Seite gespeichert werden können, und verwendet, um den Wert mit dem Funktionsaufruf lua_rawgeti(L, LUA_REGISTRYINDEX, r) abzurufen.

Sehen Sie die PiL Kapitel , sowie die Dokumentation von luaL_ref() , lua_rawgeti() und luaL_unref() für die ganze Geschichte.

Andere Tipps

Die Lua API ( http://www.lua.org/manual /5.1/manual.html#3 ) können verwendet werden, um alle Tabellen Mitglieder acess Sie wollen. Verwenden Sie lua_gettable () ein Tischelement zu extrahieren und sie auf dem lua Stack, wenn das Mitglied auch eine Tabelle ist nur nennen lua_gettable () erneut auf diese Tabelle zugreifen, und so weiter ...

(Je nachdem, was Sie tun lua_rawget () könnte eine bessere Wahl als lua_gettable sein ())

Addtional als Antwort auf Kommentar:

Okay, das ist ein wenig interessanter. Nun, ein Tisch ist ein Referenzobjekt (mehr oder weniger), so dass Sie wäre wahrscheinlich sicher irgendwo die innerste Tabelle Bezug zu speichern.

Da der lua-API scheint nicht sowieso zu haben, um direkt Tabelle ref die zu manipulieren, werden Sie wahrscheinlich den Referee zu einem globalen schieben müssen, oder ob das nicht eine neue Tabelle mit einem einzigen Tabelleneintrag nicht funktioniert. Wenn Sie die ref später wollen, nur um es von der globalen.

z.

// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal( L, "mytableref" );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top