LuaJava - 调用 Lua API 时出现未受保护的错误。

我正在尝试在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。提前感谢您的帮助。

点赞
用户258523
用户258523

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

l.LdoFile("main.lua"); 很可能没有在栈上返回必须调用的函数。这是 lua C 函数 luaL_loadfile 所做的。luaL_dofile 是围绕 luaL_loadfile 的宏,_也_运行返回的 chunk 函数。

因此在 l.LdoFile("main.lua"); 完成后,我相信您的栈上没有任何东西,而add 函数可供使用。

2014-11-03 17:10:19