在Lua中打开数组或ArrayLists(将数组转换为表)

时间:2011-05-03 17:13:26

标签: java lua luaj luajava

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

有办法做到这一点吗?

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

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

当我从Lua调用此函数时,我无法对其执行任何操作或必须实例化它,通过它迭代并将所有内容复制到Lua-Table然后使用它。有没有办法将数组转换为Java中的Lua-Table,然后返回?

编辑:我使用LuaJ和LuaJava库。

1 个答案:

答案 0 :(得分:3)

the LuaJava manual开始,您似乎必须使用Java方法操作Java返回的代理对象(使用Lua的冒号语法进行面向对象的调用,即my_proxy_array_list:get(5))。

它没有描述对表的任何内置的数组转换,所以如果需要从Java数组构建一个表(比如说,因为你想从Lua运行一个函数{它上面有{1}}库,你必须遍历数组(使用你的Java知识来做),并将每个数组索引的值放入相应的表索引中。

但是,如果您只需要像Lua表那样工作的东西,那么您可以在Lua中创建一个具有将table__index转换为__newindexget的函数的元数据适当的Java方法(可能是setlocal 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) 并获取可以使用索引运算符索引的对象:

{{1}}