LuaJ перебирает массив объектов в объекте Coerced Java - PullRequest
0 голосов
/ 08 февраля 2020

Я работаю с 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, которые были бы более подходящими для циклического перемещения по массиву?

1 Ответ

0 голосов
/ 13 февраля 2020

Из комментария Егора к моему первоначальному вопросу было решено использовать следующий код:

local i = 0
while fooInstance.bars[i+1] do

   i = i + 1
   local bar = fooInstance.bars[i]

   ... do stuff with bar ...

end
...