Java 从LuaJ调用Lua函数

Java 从LuaJ调用Lua函数,java,lua,luaj,Java,Lua,Luaj,所以,我有一个脚本是这样的: function testfunction() print("Test from testfunction"); end 我能够从Lua调用Java函数,但如何实现相反的功能呢?如何使用LuaJ从Java调用Lua函数?快速查看一下,在我看来,您必须获得表示Lua函数的org.LuaJ.vm2.LuaFunction对象,然后对其应用invoke方法。这些示例非常有用。无论如何,从java调用Lua代码非常简单,因为您总是可以通过loadstring之类的

所以,我有一个脚本是这样的:

function testfunction()
    print("Test from testfunction");
end

我能够从Lua调用Java函数,但如何实现相反的功能呢?如何使用LuaJ从Java调用Lua函数?

快速查看一下,在我看来,您必须获得表示Lua函数的
org.LuaJ.vm2.LuaFunction
对象,然后对其应用
invoke
方法。

这些示例非常有用。无论如何,从java调用Lua代码非常简单,因为您总是可以通过loadstring之类的方式来实现


我不知道,也许这就是你想要做的: (这将获得Scala中的返回值)

Main.scala:

import org.luaj.vm2._
import org.luaj.vm2.lib.jse._

object Main extends App {
    val global = JsePlatform.standardGlobals()
    global.get("dofile").call(LuaValue.valueOf("test.lua"))

    val args: Array[LuaValue] = Array(LuaValue.valueof(1), LuaValue.valueof(2))
    val retVals: LuaValue.Vararg = global.get("add").invoke(LuaValue.varargsOf(args))

    println(retVals.arg(1))
}
test.lua:

function add(a, b)
    a = a or 0
    b = b or 0
    return a + b
end
注意:我没有测试代码,但它认为类似的东西应该可以工作


编辑:在谷歌搜索时,我没有意识到这个问题实际上与Scala无关(当我来到这里时,我自己正在寻找Scala的解决方案)。然而,demon_ds1似乎已经根据我的答案在Java中找到了解决方案,现在他给出了自己的答案,所以我很高兴从这个令人困惑的答案中得到了一些好的东西

我环顾四周想解决同样的问题,我想出了一个与Tylen教授的答案非常相似的答案

test.java:

import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.jse.JsePlatform;

public class test
{
    public static void main(String[] args)
    {
        //run the lua script defining your function
        LuaValue _G = JsePlatform.standardGlobals();
        _G.get("dofile").call( LuaValue.valueOf("./test.lua"));

        //call the function MyAdd with two parameters 5, and 5
        LuaValue MyAdd = _G.get("MyAdd");
        LuaValue retvals = MyAdd.call(LuaValue.valueOf(5), LuaValue.valueOf(5));

        //print out the result from the lua function
        System.out.println(retvals.tojstring(1));
    }
}
function MyAdd( num1, num2 )
    return num1 + num2
end
测试。lua:

import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.jse.JsePlatform;

public class test
{
    public static void main(String[] args)
    {
        //run the lua script defining your function
        LuaValue _G = JsePlatform.standardGlobals();
        _G.get("dofile").call( LuaValue.valueOf("./test.lua"));

        //call the function MyAdd with two parameters 5, and 5
        LuaValue MyAdd = _G.get("MyAdd");
        LuaValue retvals = MyAdd.call(LuaValue.valueOf(5), LuaValue.valueOf(5));

        //print out the result from the lua function
        System.out.println(retvals.tojstring(1));
    }
}
function MyAdd( num1, num2 )
    return num1 + num2
end

介意更精确一点吗?我看不到任何抓取LuaFunction对象的方法,除了在加载脚本时(这不起作用,我将如何调用该方法本身?),而且,在搜索更多内容时,这与我的问题完全相同,但是询问者没有放弃完成工作的方法,我认为这不是正确的答案,因为LuaFunction是供Java开发人员内部使用的,用于解释/执行lua库函数。