0

我正在使用 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 数组。我尝试使用以下代码,但这会产生一个 org.luaj.vm2.LuaError,并在包含该ipairs函数的行上显示消息“bad argument: table expected, got userdata”。

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

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

有什么办法可以让Bar数组在 Lua 中被视为表?或者,除此之外还有什么ipairs更适合循环遍历数组的选项吗?

4

1 回答 1

0

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

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

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

   ... do stuff with bar ...

end
于 2020-02-13T18:47:14.997 回答