Я пытаюсь собрать контроллер, используя 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 и встроенных сценариев, люди объединяют функции в один сценарий или существует отдельный сценарий для каждого обратного вызова?