0

java中的一个方法返回一个数组,我想在Lua中操作来自该数组的信息,但Lua似乎没有像我希望的那样将数组转换为表。

有没有办法做到这一点?

例如,我在 Java 中有这个方法:

public Node[] getChildren(){
     return children.toArray(new Node[children.size()]);
}

当我从 Lua 调用这个函数时,我不能用它做任何事情,或者必须实例化它,遍历它并将所有内容复制到 Lua-Table 中,然后使用它。有没有办法将 Array 转换为 Java 中的 Lua-Table 然后返回?

编辑:我使用 LuaJ 和 LuaJava 库。

4

1 回答 1

3

LuaJava 手册看来,您必须使用 Java 方法(使用 Lua 的冒号语法进行面向对象的调用,即my_proxy_array_list:get(5))来操作 Java 返回的代理对象。

它没有描述数组到表的任何内置转换,因此如果您需要从 Java 数组构造一个表(例如,因为您想在其上运行 Luatable库中的函数),您将不得不迭代在 Array 上(使用您的 Java 知识来做到这一点)并将每个 Array 索引的值放入相应的表索引中。

但是,如果您只需要像 Lua 表一样工作的东西,您可以在 Lua 中使用元表制作一些东西,该元表具有可以转换__index__newindex适当的 Java 方法(可能是getset)的函数,如下所示:

local wrap_lj_proxy; do
  local proxy_mt = {}

  function proxy_mt:__index(k)
    return self.proxy:get(k)
  end

  function proxy_mt:__newindex(k,v)
    return self.proxy:set(k,v)
  end

  function wrap_lj_proxy (proxy)
    return setmetatable({proxy=proxy},proxy_mt)
  end
end

使用上述方法,您可以wrap_lj_proxy使用 ArrayList 调用并取回可以使用索引运算符索引的对象:

local indexable = wrap_lj_proxy(myAL)
print(indexable[5]) -- equivalent to myAL:get(5)
于 2011-05-24T15:13:46.597 回答