我正在使用 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
关于java - LuaJ 迭代强制 Java 对象中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60121786/