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
我正在使用 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