使用LuaJava在AndroLua中向Lua方法传递字符串参数

我在Java字符串中定义了一个Lua函数,并想将一个字符串参数传递给它。

String luaCode = "function hello(name) return 'Hello ' + name +'!' end";

执行代码

public String runGreetingFromLua(String src, String arg) throws LuaException {
    L = LuaStateFactory.newLuaState();
    L.openLibs();
    L.setTop(0);
    int ok = L.LloadString(src);
    if (ok == 0) {
        L.getGlobal("debug");
        L.getField(-1, "traceback");
        L.remove(-2);
        L.insert(-2);
        L.getGlobal("hello");
        L.pushString(arg);
        ok = L.pcall(1, 0, -2);
        if (ok == 0) {
            String res = output.toString();
            output.setLength(0);
            return res;
        }
    }
    throw new LuaException(errorReason(ok) + ": " + L.toString(-1));
}

获取未知错误5:错误处理中的错误

我完全不了解lua和luajava,我确定这是我不理解LauState对象如何工作的简单情况,Java文档不是很好(或者我缺少一些非常新手的东西)。我已经能够在lua代码内调用hello函数并使用print方法获得返回值。我在Android设备上使用AndroLua运行。

点赞
用户31751
用户31751
public String runLuaHello(String src, String arg) throws LuaException {
    //初始化
    L = LuaStateFactory.newLuaState();
    L.openLibs();
    L.setTop(0);
    //加载lua源代码
    int ok = L.LdoString(src);
    if (ok == 0) {
        //不太理解为什么是getGlobal? 但是这里设置方法名
        L.getGlobal("hello");
        //发送参数到lua
        L.pushString(arg);
        //这里指定了一个参数和一个结果
        L.call(1, 1);
        //获取结果
        String result = L.toString(-1);
        //从栈上弹出结果
        L.pop(1);
        return result;
    }
    throw new LuaException(errorReason(ok) + ": " + L.toString(-1));
}
2013-06-21 09:16:59