首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LuaJava:使用LuaJava将整个Lua表导入类似Java的数组中

LuaJava:使用LuaJava将整个Lua表导入类似Java的数组中
EN

Stack Overflow用户
提问于 2012-04-05 01:37:14
回答 1查看 2.1K关注 0票数 1

我真的被困住了,搜索了google的屁股,试图用luajava将一个表从lua“导入”到java的数组中.现在,我已经能够做一些简单的工作,用java打印lua并从表中读取一个元素。在这里工作的一切

JAVA

代码语言:javascript
复制
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

代码语言:javascript
复制
    x = { ["Version"] = 1.3,["Scans"] = 3 }

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

附注:我不能更改原来的lua文件(稍后),但是该文件将只包含一个大表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-05 09:10:59

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

如果您想用从Lua表中获取的数据填充一个Java 吊舱类,那么基本上可以使用以下选项:

  1. 手动(最简单)-创建一个简单的函数,它接受一个Lua堆栈索引,期望在该索引处有一个getField表,然后创建一个getField类的实例,然后手动地填充它,也就是说,您需要输入所有所需的getField调用。
  2. 使用Java (更通用的)--转换函数接受Lua堆栈索引和Java Class,创建该类的新实例,并使用Java反射lua_next一起迭代Lua表并填写必要的Class字段。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10021569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档