从LuaJ调用Lua函数

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

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

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

点赞
用户513763
用户513763

快速浏览一下LuaJ文档,我认为你需要获取代表Lua函数的org.luaj.vm2.LuaFunction对象,然后在其上应用invoke方法。

2012-06-29 07:32:22
用户151501
用户151501

这些示例非常有用。从 Java 调用 Lua 代码非常简单,因为你可以通过像 loadstring 这样的东西来完成。

https://github.com/sylvanaar/luaj/blob/master/luaj-vm/examples/jse/SampleJseMain.java

https://github.com/sylvanaar/luaj/blob/master/luaj-vm/examples/jse/ScriptEngineSample.java

2012-07-03 19:21:39
用户1059752
用户1059752

我不知道,也许这是你想做的事情:

(这将在 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似乎已经在基于我的答案找到了一个解决方案,并且现在他给出了自己的答案,所以我很高兴这个混乱的答案带来了一些好的结果!

2012-11-04 13:58:22
用户1800113
用户1800113

我在寻找解决同样问题的方法时,得到了与Profetylen的回答非常相似的东西。

test.java:

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

public class test
{
    public static void main(String[] args)
    {
        //运行定义函数的Lua脚本
        LuaValue _G = JsePlatform.standardGlobals();
        _G.get("dofile").call( LuaValue.valueOf("./test.lua"));

        //使用两个参数5,5调用函数MyAdd
        LuaValue MyAdd = _G.get("MyAdd");
        LuaValue retvals = MyAdd.call(LuaValue.valueOf(5), LuaValue.valueOf(5));

        //打印出来自Lua函数的结果
        System.out.println(retvals.tojstring(1));
    }
}

test.lua:

function MyAdd( num1, num2 )
    return num1 + num2
end
2012-11-05 12:31:16