Types LuaJ返回类型转换错误
我使用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
/* 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