2016-07-23 10 views
0

Ich habe vor kurzem begonnen, Lua zu lernen, weil ich es in einer Java-Anwendung verwenden muss, an der ich arbeite. Dafür benutze ich LuaJ. Ich habe im Internet recherchiert und herausgefunden, wie man eine Java-Methode für LuaJ verfügbar machen kann, aber ich kann nicht herausfinden, wie man ein Java-Objekt entlarven (auf LuaJ zugreifen) kann. Ich sah einen anderen Beitrag über C# Objekte zu Lua Belichtung und die Antwort war:Wie man Java-Objekt zu LuaJ aussetzt

Die allgemeine Methode von Objekten zwischen Lua und jede Anwendung in jeder Sprache zu teilen ist die __index() und __newindex() metamethods (und möglicherweise andere) zu definieren, von ein userdata ...

Könnte entweder jemand mir erklären, wie zu tun, was hier beschrieben wird, oder eine andere Art und Weise erklären Objekte freizulegen, damit ich im Grunde so etwas tun kann:

//In Java. 
exposeObject(myObject, "nameOfMyObject"); 

--Then in Lua 
nameOfMyObject:myFunction(); 

Antwort

0

Vielleicht möchten Sie die Klasse "CoerceJavaToLua" auschecken. Es enthält eine Methode namens "coerce()", die ein Objekt annimmt und eine LuaValue-Repräsentation des Objekts erstellt, die Sie dann Ihren Globals hinzufügen können. Als Beispiel:

Java:

LuaValue luaObject = CoerceJavaToLua.coerce(myObject); 
globals.set("nameOfMyObject", luaObject); 

Lua:

nameOfMyObject:someFunction() 

"Globals" sollte Ihre Globals Instanz, die Sie zuvor erstellt werden. Tun Sie dies, bevor Sie eine Datei laden oder von einer Zeichenfolge laden.

Wenn Sie mehr manuell eingeben LuaJ eine Möglichkeit, eine LuaValue jedes Java-Objekt zu erhalten bietet zwar aus lua:

local obj = luajava.newinstance("your.package.YourClass", "argument1", 2) 

Für den Zugriff auf statische Felder oder verwenden Sie Aufzählungen verwenden bindClass statt newInstance, bindClass findet keine andere Argumente als der Paket- und Klassenname.

Weitere Informationen finden Sie unter:

http://www.luaj.org/luaj/3.0/README.html#5

und

http://www.luaj.org/luaj/3.0/README.html#luajava