我正在尝试使用 Luaj + java 构建一个控制器。我有以下java类
public class Duck {
public void talk() { System.out.println("Duck quacks!"); }
public void walk() { System.out.println("Duck walks!"); }
}
public class Person {
public void talk() { System.out.println("Person talks!"); }
public void walk() { System.out.println("Person walks!"); }
}
以及控制器的以下 lua 脚本:
onTalk(obj)
obj:talk();
end
onWalk(obj)
obj:walk();
end
理想情况下,我想定义一个控制器(用 lua 编写),我将在其中保留所有程序的逻辑,并且我想将该控制器的 API 公开给我的 java 代码。我试图使用以下方法:
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByExtension(".lua");
ScriptEngineFactory factory = engine.getFactory();
// Script defined above
CompiledScript cs = ((Compilable)engine).compile(MY_LUA_SCRIPT);
SimpleBindings b = new SimpleBindings();
b = newSimpletBindings();
LuaValue onWalkHandler = (LuaValue)b.get("onWalk");
//func.call(LuaValue.valueOf(duck)); // Passing duck object does not work ???
我无法将对象传递给 LuaValue。如何将 java 对象传递给 lua 脚本?
PS:一般来说,当使用 Java 和嵌入式脚本时,人们是把函数捆绑在一个脚本中,还是每个回调都有一个单独的脚本?