Calling a Lua function von C ist ziemlich geradlinig aber gibt es einen Weg zu speichern eine Lua-Funktion irgendwo für den späteren Gebrauch? Ich möchte benutzerdefinierte Lua-Funktionen speichern, die an meine C-Funktion zur Verwendung bei Ereignissen übergeben werden, ähnlich wie die Connect function works in wxLua.Speichern Sie eine Lua-Funktion?
Antwort
überprüfen Sie die Registrierung (luaL_ref()
). Es verwaltet eine einfache Tabelle, in der Sie jeden Lua-Wert (wie die Funktion) speichern und von C aus mit einer einfachen Ganzzahl darauf verweisen können.
Der einfachste Weg, dies zu tun, ist, dass Ihre Funktion einen "Namen" und den Lua-Funktionstext erhält. Dann erstellen Sie eine Tabelle im Interpreter (falls sie nicht existiert) und speichern die Funktion dann mit dem benannten Parameter in der Tabelle.
Behalten Sie in Ihrer App einfach eine Liste von Funktionsnamen, die mit jedem Ereignis verknüpft sind. Wenn das Ereignis ausgelöst wird, rufen Sie einfach alle Funktionen Ihrer Tabelle auf, deren Schlüssel mit den Namen in der Liste übereinstimmt.
Diese Funktionalität existiert bereits und es ist die Lua-Referenztabelle, wie Javier sagte. –
Das Problem bei der Benennung der Funktionen in diesem Fall besteht darin, dass der Benutzer in der Lage sein soll, mehrere Funktionen mit im Wesentlichen demselben Namen zu definieren - z. "onclick" für button1 unterscheidet sich von "onclick" für button2. –
Aufbauend auf Javiers Antwort hat Lua eine spezielle universell zugängliche Tabelle namens Registry, auf die über die C-API mit dem Pseudo-Index LUA_REGISTRYINDEX
zugegriffen werden kann. Sie können die luaL_ref
Funktion nutzen jede Lua Wert, den Sie in der Registrierung wie zu speichern (einschließlich Lua-Funktionen) und eine ganze Zahl zurückerhalten, die verwendet werden können, um es von C zu verweisen:
// Assumes that the function you want to store is on the top of stack L
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);
- 1. So speichern Sie eine "CroppedBitmap"
- 2. Können Sie eine Videodatei und Sensordaten gleichzeitig speichern/speichern
- 3. Wie speichern Sie eine Ganzzahl in NSUserDefaults?
- 4. Speichern Sie eine Bildansicht in Android Studio
- 5. Speichern Sie einen Verweis auf eine Zeichenfolge
- 6. Speichern Sie eine Bedingung als Variable. Javascript
- 7. Speichern Sie eine Zeichenfolge im lokalen Speicher
- 8. Entwerfen und speichern Sie eine Wechselkurs-Kreuztabelle
- 9. serialisieren Sie eine Spalte und speichern
- 10. Speichern Sie eine Sitzung auf Formular senden
- 11. Speichern Sie eine Zeichenfolge in Register
- 12. So speichern Sie Hashwerte in eine CSV
- 13. Speichern Sie eine Klassenmethode in Django-Modell
- 14. So speichern und senden Sie eine Datei
- 15. Öffnen, entfernen Sie Text und speichern Sie eine Textdatei
- 16. Öffnen Sie eine Excel-Datei und speichern Sie als .XLS
- 17. Speichern Sie eine Methode in eine Variable, Java 8
- 18. Quickblox - So speichern Sie eine QBRTCCameraCapture in eine Datei
- 19. So speichern Sie eine Tabelle in eine Datei von Lua
- 20. So speichern Sie TypeInfo
- 21. Openlayers speichern eine Funktion
- 22. So speichern/speichern Sie temporäre Werte und vergleichen Sie?
- 23. Swift Eine Variable speichern
- 24. Erhalten Sie eine Dokument-ID, bevor sie gespeichert wird, und ändern Sie sie beim Speichern nicht.
- 25. Öffnen Sie eine ANSI-Datei und speichern Sie eine Unicode-Datei mit Delphi
- 26. Btrees in eine Datei speichern und lesen Sie es
- 27. perl speichern Sie eine Datei heruntergeladen von lwp
- 28. So speichern Sie ein WPF-Bild in eine Datei
- 29. C# speichern Sie eine Datei von einer HTTP-Anfrage
- 30. So speichern Sie eine PDF im Kontext des Servlets, itext
Lua ref einfach zu cool ist - Ich kann nicht glauben, dass ich Lua die ganze Zeit benutzt habe, ohne von dieser Funktion zu wissen. Vielen Dank! –