gpt4 book ai didi

java - 在Lua中打开数组或ArrayList(将数组转换为表)

转载 作者:行者123 更新时间:2023-12-02 00:42:42 24 4
gpt4 key购买 nike

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

有办法做到这一点吗?

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

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

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

编辑:我使用 LuaJ 和 LuaJava 库。

最佳答案

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

它没有描述数组到表的任何内置转换,因此如果您需要从 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]) -- equivalent to myAL:get(5)

关于java - 在Lua中打开数组或ArrayList(将数组转换为表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com