我正在使用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
函数的行上的消息"错误的参数:预期的表,获取的用户数据"。
for i,bar in ipairs(fooInstance.bars) do
... do stuff with each bar ...
end
当 Foo 对象被强制转换为 Lua 时,Bar 数组似乎不会变成一个表,而是变成一个userdata
类型。因此,它不能传递给ipairs
函数。
有什么方法可以使Bar
数组在Lua中被视为表吗?或者,除了ipairs
之外,是否有任何选项更适合循环遍历数组?
根据 Egor 对我原始问题的评论,解决方案是使用以下代码:
local i = 0
while fooInstance.bars[i+1] do
i = i + 1
local bar = fooInstance.bars[i]
... do stuff with bar ...
end