LuaJava:从Java调用Lua对象的方法?

时间:2013-11-19 03:22:25

标签: java scala lua luajava

我有通过LuaJava呼叫Lua的Java / Scala代码。我想模仿从J / S管道到Lua管道的一些对象层次结构;基本上在语言中有伴侣对象。换句话说,如果我在J / S中创建一个'Cracker',我会在Lua中创建一个'Cracker'对象。然后当我在J / S中调用像“eatCracker”这样的方法时,我也可以调用Lua伴侣对象的“eatCracker”。

问题是,我无法弄清楚如何创建和存储Lua对象,以及如何在特定对象上调用方法。

有人能帮忙吗?

1 个答案:

答案 0 :(得分:0)

当您从J / S将对象推送到Lua解释器并创建对它的全局引用时,然后运行并访问该对象的Lua脚本将访问与J / S端相同的对象,而不是它的副本。因此,一旦脚本结束,Java / Scala就会看到具有由Lua脚本修改的状态(数据成员)的对象。如果J / S然后修改它,并且另一个脚本运行访问该对象,那么该脚本将看到由J / S修改的新状态。

因此在调用方法时没有模仿:方法是绑定到对象的函数,因此从Lua或Java / Scala调用它会导致访问相同的对象(相同的内存块)。

但是,在构造时需要模仿:如果在J / S中构造一个对象,则必须将其显式推送到Lua解释器才能使其可用;如果解释器运行的Lua脚本创建了一个新对象,则J / S必须将其拉出(通过引用该对象的全局变量)。为了处置,我打赌当对象(J / S或Lua)没有任何参考时,对象将自动完成。

因此,您需要做的就是确保在J / S端(Lua端为“slave”)推送和拉动两个环境中您关注的对象。我不认为将其自动化是一个好主意:明确地推/拉双方都需要的东西,不多也不少。