私は現在、Java が Lua コードを解釈して実行できるようにするライブラリである LuaJ を使用したプロジェクトに取り組んでいます。これまでに収集したものから、プリミティブ、テーブル、ユーザーデータなど、Lua 自体が理解できる値のみを渡すことができます。
私が見つけられないのは、たとえば、オブジェクト参照を引数として渡すことによって、Lua で定義された関数を呼び出す方法です。
そして、これは理にかなっています。Lua は Java オブジェクト参照を理解できません。それで十分です。
私が思いついた解決策は、本質的に仮想メモリ マネージャーを作成することでした。私が思い付くことができる最も単純な実装では、それは本質的にMap<Integer,Object>
. Integer ビットは Lua スクリプトで使用されdoSomethingWithObject(object)
ます。たとえば、 object は実際にはマップの Integer キーの LuaValue です。
gets が呼び出されると (これdoSomethingWithObject(object)
は から拡張された Java で定義された関数ですOneArgFunction
)、 にフックしMap<Integer,Object>
、整数値で表されるオブジェクトをフェッチし、そのオブジェクトに対して必要なことを行う必要があります。
これには匂いがあります。これを行うためのより良い方法があるかどうかはわかりません。もしあれば、私が手に入れることができる情報を読んでみたいと思います.