gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:10:28 25 4
gpt4 key购买 nike

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

问题是,我不知道如何创建和存储 Lua 对象,以及如何调用特定对象上的方法。

有人可以帮忙吗?

最佳答案

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

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

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

因此,您需要做的就是确保您在两个环境中所关心的对象都在 J/S 端进行推送和拉取(Lua 端是“从属”)。我认为自动化这不是一个好主意:明确地仅推/拉双方需要的内容,不多也不少。

关于java - LuaJava:从Java调用Lua对象上的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20062520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com