3

我正在尝试编译具有两个要调用并从中获取一些信息的函数的 Lua 代码,但是当我在 LuaValue 对象上使用 invokemethod 时,出现此错误

LuaError:尝试索引?(一个函数值)

代码位于我为方便而创建的 LuaScript 类中

首先调用该方法编译文件

public void compile(File file) {
    try {
        Globals globals = JmePlatform.standardGlobals();
        compiledcode = globals.load(new FileReader(file), "script");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

然后这用于getSameTiles从我的 lua 脚本中调用该函数

public Object invoke(String func, Object... parameters) {
    if (parameters != null && parameters.length > 0) {
        LuaValue[] values = new LuaValue[parameters.length];
        for (int i = 0; i < parameters.length; i++)
            values[i] = CoerceJavaToLua.coerce(parameters[i]);
        return compiledcode.invokemethod(func, LuaValue.listOf(values));
    } else
        return compiledcode.invokemethod(func);
}

错误LuaError: attempt to index ? (a function value)发生在return compiledcode.invokemethod(func);作为"getSameTiles"字符串传递的行func

这是我的 Lua 代码

function getSameTiles()
    --My code here
end
4

1 回答 1

1

有几个问题需要解决。

首先,在 lua 中,load()返回一个函数,然后您需要调用该函数来执行脚本。

其次,脚本所做的是向全局表添加一个函数_G。为了调用该函数,您需要从Globals表中获取该函数并调用它。

以下代码执行此操作

Globals globals = JmePlatform.standardGlobals();

public void compile(File file) {
    try {
        globals.load(new FileReader(file), "script").call();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

public Object invoke(String func, Object... parameters) {
    if (parameters != null && parameters.length > 0) {
        LuaValue[] values = new LuaValue[parameters.length];
        for (int i = 0; i < parameters.length; i++)
            values[i] = CoerceJavaToLua.coerce(parameters[i]);
        return globals.get(func).call(LuaValue.listOf(values));
    } else
        return globals.get(func).call();
}
于 2014-03-03T18:12:36.390 回答