在Lua中使用开放数组或ArrayLists(转换数组为表)

Java 中的一种方法返回一个数组,我想在 Lua 中操作来自那个数组的信息,但是似乎 Lua 不会将数组转换成表格,就像我希望的那样。

有没有办法做到这一点?

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

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

当我从 Lua 中调用此函数时,我无法对其进行任何操作或者必须实例化它,遍历它并将所有内容复制到 Lua 表中,然后使用它。有没有一种方法可以将数组转换为 Java 中的 Lua 表,然后返回它?

编辑:我使用 LuaJ 和 LuaJava 库。

原文链接 https://stackoverflow.com/questions/5873139

点赞
stackoverflow用户34799
stackoverflow用户34799

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

手册并未描述任何关于将数组转换为表格的内置功能,因此,如果您_需要从Java数组构建表格_(例如,因为您想在Lua的table库中运行一个函数),则必须遍历数组(使用Java的知识来做)并将每个数组索引的值放入相应的表格索引中。

如果您只需要类似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

通过以上方法,您可以使用ArrayList调用wrap_lj_proxy并获取一个可以使用索引操作符索引的对象:

local indexable = wrap_lj_proxy(myAL)
print(indexable[5]) -- 相当于myAL:get(5)
2011-05-24 15:13:46