我真的被困住了,搜索了google的屁股,试图用luajava将一个表从lua“导入”到java的数组中.现在,我已经能够做一些简单的工作,用java打印lua并从表中读取一个元素。在这里工作的一切
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文件(稍后),但是该文件将只包含一个大表。
发布于 2012-04-05 09:10:59
Lua是一种动态语言,表是其唯一的数据结构。表可以包含键/值对的任何组合,这与Java的静态类型不同。因此,您需要创建一个转换函数,它将从Lua表创建一个Java对象。这不是由LuaJava自动提供的。
如果您想用从Lua表中获取的数据填充一个Java 吊舱类,那么基本上可以使用以下选项:
getField表,然后创建一个getField类的实例,然后手动地填充它,也就是说,您需要输入所有所需的getField调用。Class,创建该类的新实例,并使用Java反射与lua_next一起迭代Lua表并填写必要的Class字段。如果您只打算对一种类型的Lua表使用转换,我建议您使用第一个选项。缺点是,每次更改结构时,都必须更新转换代码。第二种方法也有缺点,例如,您应该如何处理丢失/额外密钥、子表等情况。
https://stackoverflow.com/questions/10021569
复制相似问题