2016-07-23 124 views
0

我最近開始學習Lua,因爲我需要在我正在使用的Java應用程序中使用它。爲此我使用LuaJ。我在互聯網上搜索過,發現如何將一個Java方法公開給LuaJ,但是我找不到如何公開(給LuaJ訪問)一個Java對象。我看到另一篇文章關於將C#對象,Lua和答案是這樣的:如何將java對象暴露給LuaJ

任何語言交流Lua和任何應用程序之間的對象的一般方法是定義的__index()__newindex()元方法(可能還有其他人)一個userdata ...

可能有人要麼向我解釋如何做到這到底是怎麼描述或解釋另一種方式來公開對象,所以我基本上可以做這樣的事情:

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

--Then in Lua 
nameOfMyObject:myFunction(); 

回答

0

您可能希望查看「CoerceJavaToLua」類。它包含一個名爲「coerce()」的方法,它接受一個對象並創建一個對象的LuaValue表示,然後您可以將它添加到您的全局變量中。舉個例子:

的Java:

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

的Lua:

nameOfMyObject:someFunction() 

「全局」 應該是前面創建的全局實例。在加載文件或從字符串加載之前執行此操作。

如果您更多的手動希望,LuaJ確實提供了一種從Lua中得到任何java對象的LuaValue:

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

要訪問靜態字段或使用枚舉使用bindClass代替的newInstance,bindClass不帶不同於包和類名稱的參數。

欲瞭解更多信息請查看:

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

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