java中的方法返回一个Array,我想在Lua中操作该数组中的信息,但似乎Lua没有像我希望的那样将数组转换为表。
有办法做到这一点吗?
例如我在Java中有这个方法:
public Node[] getChildren(){
return children.toArray(new Node[children.size()]);
}
当我从Lua调用此函数时,我无法对其执行任何操作或必须实例化它,通过它迭代并将所有内容复制到Lua-Table然后使用它。有没有办法将数组转换为Java中的Lua-Table,然后返回?
编辑:我使用LuaJ和LuaJava库。答案 0 :(得分:3)
从the LuaJava manual开始,您似乎必须使用Java方法操作Java返回的代理对象(使用Lua的冒号语法进行面向对象的调用,即my_proxy_array_list:get(5)
)。
它没有描述对表的任何内置的数组转换,所以如果需要从Java数组构建一个表(比如说,因为你想从Lua运行一个函数{它上面有{1}}库,你必须遍历数组(使用你的Java知识来做),并将每个数组索引的值放入相应的表索引中。
但是,如果您只需要像Lua表那样工作的东西,那么您可以在Lua中创建一个具有将table
和__index
转换为__newindex
和get
的函数的元数据适当的Java方法(可能是set
和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)
并获取可以使用索引运算符索引的对象:
{{1}}