Я работаю с LuaJ 3.0.1, и у меня возникают проблемы с итерацией по массиву, содержащемуся в приведенном Java объекте в моем Lua сценарии. В настоящее время вот что я делаю:
У меня есть класс 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
Кажется, что массив Bar не становится таблицей, когда объект Foo приводится к Lua, вместо этого он становится типом userdata
. Таким образом, он не может быть передан в функцию ipairs
.
Можно ли как-нибудь это сделать, чтобы массив Bar
обрабатывался как таблица в Lua? В качестве альтернативы, есть ли какие-либо параметры, кроме ipairs
, которые были бы более подходящими для циклического перемещения по массиву?