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

LuaJ Iterate over Object Array in Coerced Java Object

我正在使用 LuaJ 3.0.1,在我的 Lua 脚本中迭代包含在强制 Java 对象中的数组时遇到问题。目前,我正在做的是:

我有一个包含对象数组的 Java class。像

public class Foo {

   public Bar[] bars;

}

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

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

但是,问题出现在 Lua 脚本本身,我需要在其中迭代 Bar 数组。我尝试使用以下代码,但这会在包含 ipairs 函数的行上生成 org.luaj.vm2.LuaError 消息 "bad argument: table expected, got userdata"。

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

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

有什么方法可以使 Bar 数组在 Lua 中被视为 table?或者,除了 ipairs 之外,是否还有更适合遍历数组的选项?

根据 Egor 对我最初问题的评论,解决方案是使用以下代码:

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

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

   ... do stuff with bar ...

end