0

javaのメソッドは配列を返し、Luaのその配列からの情報を操作したいのですが、Luaは期待どおりに配列をテーブルに変換しないようです。

これを行う方法はありますか?

たとえば、私はJavaでこのメソッドを持っています:

public Node[] getChildren(){
     return children.toArray(new Node[children.size()]);
}

Luaからこの関数を呼び出すと、何もできないか、インスタンス化する必要があります。それを繰り返し処理し、すべてをLua-Tableにコピーしてから使用します。配列をJavaでLua-Tableに変換し、それを返す方法はありますか?

編集:私はLuaJとLuaJavaライブラリを使用しています。

4

1 に答える 1

3

LuaJava マニュアル から、 Javaメソッドを使用して Java から返されたプロキシ オブジェクトを操作する必要があるようです (オブジェクト指向の呼び出しには Lua のコロン構文を使用しますmy_proxy_array_list:get(5))。

配列からテーブルへの組み込みの変換については説明していないため、Java 配列からテーブルを構築する必要がある場合(たとえば、Lua のライブラリから関数を実行したいtable場合)、反復する必要があります。 Array に対して (Java の知識を使用してそれを行う)、各 Array インデックスの値を対応するテーブル インデックスに入れます。

ただし、Lua テーブルのように機能するものが必要なだけの場合は、次のように、適切な Java メソッド (おそらく__indexおよび) に変換する関数を持つメタテーブルを使用して、Lua で何かを作成できます。__newindexgetset

local wrap_lj_proxy; do
  local proxy_mt = {}

  function proxy_mt:__index(k)
    return self.proxy:get(k)
  end

  function proxy_mt:__newindex(k,v)
    return self.proxy:set(k,v)
  end

  function wrap_lj_proxy (proxy)
    return setmetatable({proxy=proxy},proxy_mt)
  end
end

上記を使用すると、ArrayList で呼び出しwrap_lj_proxyて、index 演算子でインデックス付けできるオブジェクトを取得できます。

local indexable = wrap_lj_proxy(myAL)
print(indexable[5]) -- equivalent to myAL:get(5)
于 2011-05-24T15:13:46.597 に答える