LuaJ返回类型转换错误。

我有以下使用 LuaJ 的代码,没有像我预期的那样工作。

注意,我的 Lua 脚本调用了两个名为 "numbers" 的不同函数,一个来自转换的对象,另一个在原生 Lua 中。两个函数都应该返回两个值,其中只有第一个值被使用。

执行输出如下:

但我期望它是这样的:

我错过了什么吗?

点赞
用户2556943
用户2556943

你的类正在被强制转换,但是多个返回值比较棘手。

number 设为类型为 VarArgFunction 的字段,并实现 VarArgFunction.invoke()

接着,Lua 的 _object.numbers_ 映射到 Java 的 _MyClass.numbers_ 的值,这个值是一个 VarArgFunction,因此可以被带有多个参数和多个返回值的函数调用。

public class LuaTest {

    public static String name = "script";
    public static String script =
        "function numbers()"
        + "   return 200, 100"
        + "   end "
        + "object = obj:new() "
        + "x = numbers() "
        + "print(x)"
        + "print(\"x type = \" .. type(x))"
        + "z = object:numbers()"
        + "print(z)"
        + "print(\"z type = \" .. type(z))";

    public static void main(String[] args) throws Exception {
        LuaValue myObject = CoerceJavaToLua.coerce(new MyClass());
        Globals globals = JsePlatform.standardGlobals();
        globals.set("obj", myObject);
        LuaValue chunk = globals.load(script);
        chunk.call();
    }

    public static class MyClass {

        public VarArgFunction numbers = new VarArgFunction() {
            @Override
            public Varargs invoke(Varargs args) {
                return varargsOf(valueOf(200), valueOf(100));
            }
        };
    }
}
2016-01-23 05:59:53