Java 如何在LuaJ中执行Lua编译文件并使用自定义全局环境调用函数?

Java 如何在LuaJ中执行Lua编译文件并使用自定义全局环境调用函数?,java,lua,precompiled,luaj,Java,Lua,Precompiled,Luaj,我已经用ScriptEngine预编译了Lua脚本 private void preCompile(){ ScriptEngineManager manager = new ScriptEngineManager(); engine = manager.getEngineByName("luaj"); if(engine instanceof Compilable){ try { compScript = ((Compilable)

我已经用ScriptEngine预编译了Lua脚本

private void preCompile(){
    ScriptEngineManager manager = new ScriptEngineManager();
    engine = manager.getEngineByName("luaj");
    if(engine instanceof Compilable){
        try {
            compScript = ((Compilable)engine).compile(scriptContent);
        }catch (ScriptException se){
            System.err.println(se.getMessage());
        }
    }else{
        System.err.println("Engine can't compile code!");
    }
我还可以使用eval()函数执行它,并使用LuaFunction.invoke(LuaValue)调用脚本中的函数

现在我不知道如何将“globals”链接到编译文件(compScript)。我尝试过全局编译函数

Prototype chunk = globals.compilePrototype(new StringReader(script), "script");
chunk.call()
可用于执行脚本,但我仍然不知道如何在自定义“全局”环境中通过“chunk”或“compScript”调用脚本中的函数(带参数或不带参数)


此外,
globals.load()函数是否编译脚本文件?我只想编译一次脚本并重用它。

必须使用
globals.load
获取块。然后您可以
调用
块,并从globals中获取所需的lua函数,假设您的函数定义为全局函数。如果它是本地的
,则不能使用它

LuaValue chunk = globals.load(script, "script");
chunk.call();
LuaValue func = globals.get(functionName);
func.call(args);

您是否看到了接受函数名的
invokemethod
方法?
Prototype chunk = globals.compilePrototype(new StringReader(script), "script");
LuaValue chunk = globals.load(script, "script");
chunk.call();
LuaValue func = globals.get(functionName);
func.call(args);