Как я могу передать объекты в открытую функцию luaj?

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

8
задан greatwolf 23 December 2014 в 10:50
поделиться