LuaJ遍历强制转换Java对象中的对象数组

我正在使用LuaJ 3.0.1,并且在我的Lua脚本中遍历包含在强制转换Java对象中的数组时出现问题。目前,这是我正在做的:

我有一个Java类,它包含一个对象数组。类似于

public class Foo {

   public Bar[] bars;

}

我有一个LuaFunction,它将Foo作为其参数之一。我调用这个函数,像下面这样传递一个Foo实例:

luaFunction.invoke(new LuaValue[]{
   CoerceJavaToLua.coerce(fooInstance)
});

然而,问题出现在Lua脚本本身,我需要遍历Bar数组。我尝试使用以下代码,但这会在包含ipairs函数的行上产生一个带有消息“bad argument:table expected,got userdata”的org.luaj.vm2.LuaError。

for i,bar in ipairs(fooInstance.bars) do
   ... do stuff with each bar ...
end

当将Foo对象强制转换为Lua时,Bar数组似乎不会成为表格,而是变成了userdata类型。因此,它不能传递给ipairs函数。

有没有办法使Bar数组在Lua中被视为表格?或者,除了ipairs之外,是否有任何其他适用于循环遍历数组的选项?

点赞
用户3195594
用户3195594

解决方案来自于 Egor 在我原来的问题中的评论,代码如下:

local i = 0
while fooInstance.bars[i+1] do

   i = i + 1
   local bar = fooInstance.bars[i]

   ... 使用 bar 进行操作 ...

end
2020-02-13 18:47:14