【问题标题】:How to expose java object to LuaJ如何将 java 对象暴露给 LuaJ
【发布时间】:2016-11-27 11:09:39
【问题描述】:

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

在 Lua 和任何语言的任何应用程序之间共享对象的一般方法是定义 userdata 的 __index() 和 __newindex() 元方法(可能还有其他)...

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

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

--Then in Lua
nameOfMyObject:myFunction();

【问题讨论】:

    标签: java lua scripting luaj


    【解决方案1】:

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

    Java:

    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

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2010-12-01
      • 2018-06-19
      • 2013-09-09
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多