0

我最近开始学习 Lua,因为我需要在我正在开发的 Java 应用程序中使用它。为此,我正在使用 LuaJ。我在互联网上四处搜索,发现如何将 Java 方法公开给 LuaJ,但我不知道如何公开(让 LuaJ 访问)Java 对象。我看到另一篇关于将 C# 对象暴露给 Lua 的帖子,答案是这样的:

__index()在 Lua和任何语言的任何应用程序之间共享对象的一般方法是定义__newindex()一个userdata...

有人可以向我解释如何做这里描述的事情,或者解释另一种暴露对象的方法,这样我基本上可以做这样的事情:

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

--Then in Lua
nameOfMyObject:myFunction();
4

1 回答 1

0

您可能希望查看“CoerceJavaToLua”类。它包含一个名为“coerce()”的方法,该方法接受一个对象并创建该对象的 LuaValue 表示,然后您可以将其添加到全局变量中。举个例子:

爪哇:

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

卢阿:

nameOfMyObject:someFunction()

“globals”应该是您之前创建的 Globals 实例。在加载文件或从字符串加载之前执行此操作。

如果您希望更多手动操作,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

于 2016-08-23T03:35:53.837 回答