【问题标题】:Multiple return values in LuaJLuaJ 中的多个返回值
【发布时间】:2015-12-10 23:35:23
【问题描述】:

我一直在尝试找到一种从 LuaJ 中的 Java 方法返回多个值的方法。也就是说,从 Java 返回多个值,以便在 Lua 代码中检索。

再一次……我的意思是:

public LuaValue call() {

    Dimension size = guiConsole.getSize();

    int width = LuaValue.valueOf(size.width), height = LuaValue.valueOf(size.height);

    return width, height; // This obviously wouldn't work, but this is the functionality I'm after

}

这样我就可以从 Lua 代码中做到:

width, height = getSize()

成功检索宽度和高度。

最好的问候,

【问题讨论】:

  • 如果需要,创建一个包装对象,并返回该对象。也许是一个哈希图
  • 我可能应该将其添加到帖子中:我已经研究了几种将数据包装在某种包装器对象中的方法。我已经理解了,根据 API,可以使用 Varargs,但这不会转换为作为返回类型的 LuaValue。

标签: java luaj


【解决方案1】:

我设法找到了方法。在做了更多的研究之后,事实证明有一个 VarArgFunction 可以用来扩展你的类。然后,您无需像通常在“call()”方法中那样返回您的 LuaValue,而是使用“invoke(Varargs v)”方法。这允许您返回一个包含 LuaValues 的 Varargs 对象。 Varargs 是使用“LuaValue.varargsOf(LuaValue[] luaValues)”方法构造的。

例子:

public class GetSize extends VarArgFunction {

private Dimension size;

public GetSize(Dimension size) {

    this.size= size;

}

public Varargs invoke(Varargs v) {

    Varargs varargs = LuaValue.varargsOf(new LuaValue[] {LuaValue.valueOf(size.width), 
            LuaValue.valueOf(size.height)});

    return varargs;

}

}

话虽如此,现在可以从 Lua 中的“getSize()”函数中检索两个值!

width, height = getSize()

耶!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多