1

私は本当にこれに固執し、グーグルのお尻を間違いなく検索し、luaからluajavaを使用してjavaの配列にテーブルを「インポート」しようとしました...今、私はいくつかの簡単なことを行うことができました、luaを印刷します- Javaの変数とテーブルからの単一の要素の読み取り..ここで機能するすべてのもの

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で何も見つからなかったので、私は誰かがこれを経験していることを願っています。おそらく本当に簡単なものですが、情報を見つけるのは難しいです。これに関する情報については本当に幸せです!

ps元のluaファイル(後で)を変更することはできませんが、そのファイルには1つの大きなテーブルしか含まれません。

4

1 に答える 1

1

Lua は動的言語であり、テーブルがその唯一のデータ構造です。Java の静的型付けとは対照的に、テーブルにはキーと値のペアの任意の組み合わせを含めることができます。したがって、Lua テーブルから Java オブジェクトを作成する変換関数を作成する必要があります。これは、LuaJava によって自動的に提供されるわけではありません。

Lua テーブルから取得したデータをJava PODクラスに入力する場合、基本的に次のオプションがあります。

  1. 手動で行う (最も簡単) - Lua スタック インデックスを取得し、そのインデックスで Lua テーブルを想定し、POD クラスの Java インスタンスを作成し、手動でデータを入力する単純な関数を作成します。つまり、入力する必要があります。必要なすべてのgetField呼び出し。

  2. Java リフレクションを使用する (より一般的な) - 変換関数は Lua スタック インデックスと Java を受け取り、Classそのクラスの新しいインスタンスを作成し、Java リフレクションを一緒に使用lua_nextして Lua テーブルを反復処理し、必要な Java フィールドに入力します。

1 種類の Lua テーブルでのみ変換を使用する場合は、最初のオプションを使用することをお勧めします。欠点は、構造を変更するたびに変換コードを更新する必要があることです。2 番目のアプローチにも欠点があります。たとえば、欠落/余分なキー、サブテーブルなどのケースをどのように処理する必要があるかなどです。

于 2012-04-05T09:10:59.487 に答える