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 функция доступна для использования.

Другие вопросы по тегам