在我的应用程序中,我需要我的 lua 脚本来索引一个 java 数组。出于某种我不明白的原因,我根本无法在 Lua 中索引数组。这是我的 Lua 文件(test_lua.lua):https ://pastebin.com/zQUPVArz
这是调用此代码的 Java 文件(experiment.Experimental.class):https ://pastebin.com/Gr9EsvbM
这是 Bobject 界面:https ://pastebin.com/agdS41sc
使用这种方法,我无法对 Lua 中的 Java 数组做任何事情。我什至尝试使用反射和 CoerceLuaToJava 来索引数组,但无济于事。下面是有问题的 Lua 代码:
behavior_table.doArray = function(array)
print("Length:", array.length) -- Prints array length correctly
print(array) -- Prints the array using toString(), resulting in [Ljava.lang.Object;@2d363fb3
print(array[0]) -- prints 'nil'
Array = luajava.bindClass("java.lang.reflect.Array")
Coerce = luajava.bindClass("org.luaj.vm2.lib.jse.CoerceLuaToJava")
array[0] = 4 -- Throws a LuaError: index expected, got userdata
print(array[0]) -- prints 'nil', as before
print(Array.get(Coerce.coerce(array), 0)) -- Throws a NullPointerException
end
在此代码之前,我还尝试使用显式类型强制将 behavior_table 本身作为 Java 中的 LuaTable 对象加载,如下所示:
table.get("doArray").invoke(new LuaValue[]{
CoerceJavaToLua.coerce(array)
}).arg1()
...因此从表中调用函数并自己强制 Java 对象,而不是让脚本返回具有覆盖函数的 Bobject 实例。这种方法根本没有改变结果。
我只是使用不正确的语法来索引强制数组吗?我觉得它被正确地强制了,因为我可以使用 toString() 打印它并访问它的长度。我认为数组被强制转换为 lua 表,对吗?如果是这种情况,我如何索引它的值?我对 Lua 的“表”的概念还是很陌生
感谢您的时间。