LuaJ 在强制 Java 对象中迭代对象数组
Posted
技术标签:
【中文标题】LuaJ 在强制 Java 对象中迭代对象数组【英文标题】:LuaJ Iterate over Object Array in Coerced Java Object 【发布时间】:2020-05-24 01:58:36 【问题描述】:我正在使用 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
之外,还有其他更适合循环遍历数组的选项吗?
【问题讨论】:
local i=0; while fooInstance.bars[i+1] do i=i+1; local bar = fooInstance.bars[i]; ... end
@EgorSkriptunoff 谢谢!效果很好
【参考方案1】:
根据 Egor 对我最初问题的评论,解决方案是使用以下代码:
local i = 0
while fooInstance.bars[i+1] do
i = i + 1
local bar = fooInstance.bars[i]
... do stuff with bar ...
end
【讨论】:
以上是关于LuaJ 在强制 Java 对象中迭代对象数组的主要内容,如果未能解决你的问题,请参考以下文章