Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types LuaJ返回类型转换错误_Types_Lua_Luaj_Multiple Return Values - Fatal编程技术网

Types LuaJ返回类型转换错误

Types LuaJ返回类型转换错误,types,lua,luaj,multiple-return-values,Types,Lua,Luaj,Multiple Return Values,我使用LuaJ编写了以下代码,但它并没有像我预期的那样工作 /* imports ommited */ public class LuaTest { public static String name = "script"; public static String script = "function numbers()" + " return 200, 100" + " end " + "object = obj:new() " + "x

我使用LuaJ编写了以下代码,但它并没有像我预期的那样工作

/* imports ommited */
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 class MyClass {

public VarArgFunction numbers() {
    return new MultiValueReturn(LuaValue.valueOf(200), LuaValue.valueOf(100));
}

public class MultiValueReturn extends VarArgFunction {
    private LuaValue[] args;

    public MultiValueReturn(LuaValue p1, LuaValue p2) {
        this.args = new LuaValue[2];
        this.args[0] = p1;
        this.args[1] = p2;
    }

    @Override
    public LuaValue arg(int i) {
        if (i <= this.args.length) {
            return args[i - 1];
        }
        return null;
    }
}
}
但我希望是这样的:

200
x type = number
200
z type = number

我遗漏了什么吗?

您的类被强制了,但是多个返回值很有挑战性

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

然后lua的object.numbers映射到Java的MyClass.numbers的值,这是一个VarArgFunction,因此可以使用多个参数调用它并返回多个返回值

公共类LuaTest{
公共静态字符串name=“script”;
公共静态字符串脚本=
“函数号()”
+“返回200100”
+“结束”
+“object=obj:new()”
+“x=数字()
+“打印(x)”
+“打印(\“x类型=\”。类型(x))”
+“z=对象:数字()
+“打印(z)”
+“打印(\“z类型=\”。类型(z))”;
公共静态void main(字符串[]args)引发异常{
LuaValue myObject=compressejavatolua.compresse(新的MyClass());
Globals Globals=jsepplatform.standardGlobals();
globals.set(“obj”,myObject);
LuaValue chunk=globals.load(脚本);
chunk.call();
}
公共静态类MyClass{
public VarArgFunction number=new VarArgFunction(){
@凌驾
公共Varargs调用(Varargs args){
返回varargsOf(值为(200),值为(100));
}
};
}
}
200
x type = number
200
z type = number