gpt4 book ai didi

java - LuaJava:使用 LuaJava 将整个 Lua-Table 导入类 Java 数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:30 24 4
gpt4 key购买 nike

我真的被困在这个问题上,绝对搜索了我的谷歌,试图用luajava将一个表从lua“导入”到java中的数组......现在,我已经能够做一些简单的事情,在 java 中打印 lua-vars 并从表中读取单个元素..一切都在这里工作

JAVA

LuaState L = LuaStateFactory.newLuaState();
L.openLibs();
L.LdoFile("data/test.lua");
L.getGlobal("x"); //I want to read lua-variable x
LuaObject obj = L.getLuaObject(L.getTop()); //So I get the top-element here
System.out.println(obj.getField("Version"));

LUA

    x = { ["Version"] = 1.3,["Scans"] = 3 }

现在,这显然对于检索单个值来说相当容易,但我想将整个对象放入Java(作为数组或其他形式),这样我就可以用它做一些事情。我尝试循环遍历该 LuaObject,但由于它还不是可迭代的或“真正的”数组,所以这是不可能的。简单地输出 obj 就会告诉我它是一个 lua 表,我已经用 .getObject 尝试了很多愚蠢的东西,但没有成功。然后我读了一些关于代理和 .pcall 的内容(看起来是为了将 Java 中的值传递给 lua 中的函数,但这不是我想要的)在(非常非常糟糕)记录的javadoc中找不到任何内容,所以我希望有人有这方面的经验..可能非常简单,但很难找到相关信息。关于这方面的任何信息真的很高兴!

附:我无法更改原始 lua 文件(稍后),但该文件将只包含一个大表..

最佳答案

Lua是一种动态语言,表是其唯一的数据结构。表可以包含键/值对的任意组合,这与 Java 的静态类型相反。因此,您需要创建一个转换函数,它将从 Lua 表创建一个 Java 对象。 LuaJava 不会自动提供此功能。

如果要填写Java POD类与从 Lua 表中获取的数据,您基本上有以下选项:

  1. 手动执行(最简单) - 创建一个简单的函数,该函数采用 Lua 堆栈索引,期望该索引处有一个 Lua 表,然后创建 POD 类的 Java 实例并手动填充数据,即您需要键入所有必需的 getField 调用。

  2. 使用 Java 反射(更通用) - 转换函数采用 Lua 堆栈索引和 Java Class,创建该类的新实例并使用 Java reflectionlua_next 一起迭代 Lua 表并填写必要的 Java 字段。

如果您只想在一种类型的 Lua 表上使用转换,我建议您使用第一个选项。缺点是每次改变结构时,都必须更新转换代码。第二种方法也有缺点,例如您应该如何处理丢失/额外键、子表等的情况。

关于java - LuaJava:使用 LuaJava 将整个 Lua-Table 导入类 Java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021569/

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