2016-07-23 125 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