java - LuaJ 迭代强制 Java 对象中的对象数组

标签 java lua luaj

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

相关文章:

java - Mina - HTTP 代理 - AbstractHttpLogicHandler 有什么用?

java - 输入整数错误抛出

Lua - 实现用户数据迭代器

c++ - 从 Xcode 调试器调用 lua_getstack

java - LuaJ - 在 Java 中创建 Lua 函数

java - SSL 和 NIO 非阻塞套接字

java - 尝试使用向导导出 Eclipse 产品时出错

xml - LuaXML 解析具有多个同名标签的 XML

java - 如何放弃 LuaJ 协程 LuaThread?