我目前正在与LuaJ合作开发一个项目,该库允许Java解释并执行Lua代码。到目前为止,我只能传递Lua本身可以理解的值,例如基元,表,用户数据等。
我找不到的方法是,例如,通过传入对象引用作为参数来调用Lua中定义的函数。
这很有意义。 Lua无法理解Java对象引用,这很公平。
我想出的解决方案实际上是创建一个虚拟内存管理器。在我能想到的最简单的实现中,它实际上是一个Map<Integer,Object>
。 Lua脚本中使用了Integer位,类似于doSomethingWithObject(object)
,其中object实际上是映射中Integer键的LuaValue。
当调用doSomethingWithObject(object)
时(这是Java中定义的一个函数,是从OneArgFunction
扩展而来的),它必须挂接到Map<Integer,Object>
中,以整数形式获取对象值,并对该对象执行任何操作。
这闻起来很香。我不确定是否有更好的方法可以做到这一点。如果有的话,我很乐意阅读所有可以获取的信息。