2009-02-10 11 views

Antwort

23

ü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.

+2

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! –

0

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.

+0

Diese Funktionalität existiert bereits und es ist die Lua-Referenztabelle, wie Javier sagte. –

+0

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. –

13

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); 
Verwandte Themen