0

我试图让一个在 LuaJava 中工作的简单函数(添加两个数字)。我对 Lua 的经验很少,并且发现这很困难,因为我无法找到 LuaJava 的深入文档。我目前可以从 lua 打印到 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。提前感谢您的帮助。

4

1 回答 1

0

我将假设问题发生在这条线上l.call(0, 0);

l.LdoFile("main.lua");很可能不会在堆栈上返回必须调用的函数。这就是 lua C 函数的luaL_loadfile作用。luaL_dofile是一个宏luaL_loadfile它还运行返回的块函数。

所以l.LdoFile("main.lua");完成后我相信你在堆栈上什么都没有,你的add函数可以使用。

于 2014-11-03T17:10:19.147 回答