J/S から Lua インタープリターにオブジェクトをプッシュし、それへのグローバル参照を作成すると、その後実行されてオブジェクトにアクセスする Lua スクリプトは、J/S 側と同じオブジェクトにアクセスし、そのコピーではありません。 . そのため、スクリプトが終了すると、Java/Scala は、Lua スクリプトによって変更された状態 (データ メンバー) を持つオブジェクトを認識します。その後、J/S がそれを変更し、そのオブジェクトにアクセスする別のスクリプトが実行されると、そのスクリプトは、J/S によって変更された新しい状態を認識します。
したがって、メソッドを呼び出すときに模倣はありません。メソッドはオブジェクトにバインドされた関数であるため、Lua または Java/Scala から呼び出すと、同じオブジェクト (同じメモリ ブロック) がアクセスされます。
ただし、構築時には模倣が必要です。J/S でオブジェクトを構築する場合は、それを使用可能にするために明示的に Lua インタープリターにプッシュする必要があります。インタープリターによって実行される Lua スクリプトが新しいオブジェクトを作成する場合、J/S はそれを (オブジェクトを参照するグローバル変数を介して) プルする必要があります。破棄については、どちらの側 (J/S または Lua) にも参照が残っていない場合、オブジェクトが自動的にファイナライズされることに賭けます。
したがって、両方の環境に必要なオブジェクトが J/S 側でプッシュおよびプルされるようにするだけです (Lua 側は「スレーブ」です)。これを自動化するのは良い考えではないと思います。両側で必要なものだけを明示的にプッシュ/プルします。それ以上でもそれ以下でもありません。