Es wird angenommen, dass ich viele verschiedene Funktionsnamen in Lua für dieselbe Funktion in C anmelde. Kann ich nun bei jedem Aufruf meiner C-Funktion feststellen, welcher Funktionsname aufgerufen wurde?
zum Beispiel:
%Vor%Also, wie bekomme ich den Namen der Funktion, die es heißt?
Eine andere Möglichkeit, Ihre Frage anzugehen, besteht darin, upvalues zu verwenden. Grundsätzlich registrieren Sie die C-Funktionen mit der Funktion unten statt lua_register
:
Dann ist getFunctionName einfach
%Vor% Das heißt, was Sie zu tun versuchen, scheint fischig zu sein - was wollen Sie erreichen? Die Funktion runCommand
, die in der Frage gepostet wird, sieht wie eine schrecklich ineffiziente Art aus, etwas zu tun, was Lua sowieso für dich tut.
Sie können lua_getinfo: Ссылка
verwendenDies könnte funktionieren:
%Vor%Es gibt eine Einschränkung:
name: ein vernünftiger Name für die angegebene Funktion. Da Funktionen in Lua erstklassige Werte sind, haben sie keinen festen Namen: einige Funktionen können den Wert mehrerer globaler Variablen haben, während andere nur in einem Tabellenfeld gespeichert werden können. Die Funktion lua_getinfo prüft, wie die Funktion aufgerufen wurde, um einen passenden Namen zu finden. Wenn es keinen Namen finden kann, wird name auf NULL gesetzt.
Eine alternative Lösung wäre, eine Metatabelle für die Lua-Umgebungstabelle zu registrieren, die die __index
-Metamethode für das Versenden dieser Funktionsaufrufe implementiert.
Wenn Sie bereit sind, alle unbekannten Funktionen auszuführen, können Sie möglicherweise Spiele mit setmetable und currying :
%Vor% In diesem Beispiel habe ich unbekannte Ausführungen nur unter _util
und nicht in der globalen Tabelle geschlürft.