LuaJava - незащищенная ошибка при вызове Lua API
Я пытаюсь получить простую функцию, работающую в LuaJava (добавив два числа). У меня очень мало опыта работы с Lua, и я нахожу это трудным, поскольку я не смог найти подробную документацию для LuaJava. В настоящее время я могу распечатать на консоли Java из Луа, но ничего кроме этого.
Я попытался реализовать несколько методов, но каждый раз получаю одну и ту же ошибку:
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
Это код, который я использую:
import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;
public class Hello {
public static void main(String[] args) {
LuaState l = LuaStateFactory.newLuaState();
l.openLibs();
l.LdoFile("main.lua");
l.call(0, 0);
l.getGlobal("add");
l.pushInteger(1);
l.pushInteger(1);
l.call(2, 1);
int result = l.toInteger(1);
l.pop(1);
System.out.println("1 + 1 = " + result);
}
}
И файл Lua:
function add(a, b)
return a + b
end
Моя IDE это Eclipse. Заранее благодарю за любую помощь.
1 ответ
Я собираюсь предположить, что проблема происходит на этой линии l.call(0, 0);
,
l.LdoFile("main.lua");
скорее всего, не возвращает функцию в стеке, которая должна быть вызвана. Вот что такое функция lua C luaL_loadfile
делает. luaL_dofile
это макрос вокруг luaL_loadfile
который также запускает возвращенную функцию чанка.
Так после l.LdoFile("main.lua");
заканчивается я считаю, что у вас ничего нет в стеке и ваши add
функция доступна для использования.