0

作業中の Java アプリケーションで Lua を使用する必要があるため、最近 Lua の学習を開始しました。このために、LuaJ を使用しています。インターネットで検索して、Java メソッドを LuaJ に公開する方法を見つけましたが、Java オブジェクトを公開する (LuaJ にアクセスを許可する) 方法がわかりません。C# オブジェクトを Lua に公開することに関する別の投稿を見ましたが、その答えは次のとおりです。

Lua と任意の言語の任意のアプリケーションとの間でオブジェクトを共有する一般的な方法__index()は、__newindex().userdata

誰かがここで説明されていることを行う方法を説明するか、オブジェクトを公開する別の方法を説明して、基本的に次のようなことを行うことができます:

//In Java.
exposeObject(myObject, "nameOfMyObject");

--Then in Lua
nameOfMyObject:myFunction();
4

1 に答える 1

0

クラス「CoerceJavaToLua」をチェックアウトすることをお勧めします。これには、オブジェクトを受け取り、そのオブジェクトの LuaValue 表現を作成する「coerce()」というメソッドが含まれています。これをグローバルに追加できます。例として:

ジャワ:

LuaValue luaObject = CoerceJavaToLua.coerce(myObject);
globals.set("nameOfMyObject", luaObject);

ルア:

nameOfMyObject:someFunction()

「globals」は、前に作成した Globals インスタンスである必要があります。これは、ファイルをロードする前、または文字列からロードする前に行ってください。

もっと手動でやりたい場合、LuaJ は lua 内から任意の Java オブジェクトの LuaValue を取得する方法を提供します。

local obj = luajava.newinstance("your.package.YourClass", "argument1", 2)

静的フィールドにアクセスするか、Enum を使用するには、newInstance の代わりに bindClass を使用します。bindClass は、パッケージとクラス名以外の引数を取りません。

詳細については、以下をご覧ください。

http://www.luaj.org/luaj/3.0/README.html#5

http://www.luaj.org/luaj/3.0/README.html#luajava

于 2016-08-23T03:35:53.837 に答える