Java 如何在LuaJ中执行Lua编译文件并使用自定义全局环境调用函数?
我已经用ScriptEngine预编译了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)
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);