Java コードが特に LuaValue を要求するときに、LuaJ が引数として LuaValue を受け入れないという問題に遭遇しました。
public void registerEvent(LuaValue id, String event, String priority,
LuaValue callback)
{
if(!(id instanceof LuaTable))
{
throw new RuntimeException("id must be an LuaTable");
}
EventDispatcher.addHandler(id, event, priority, callback);
}
理想的には、これにより、Lua のコードが次のように単純に読み取れるようになります...
function main(this)
this.modName="Some Mod"
this.lastX = 0
hg.both.registerEvent(this, "inputcapturedevent", "last", eventRun)
end
function eventRun(this, event)
this.lastX += event.getX()
end
悲しいことに、これはシンプルで、ユーザーデータを期待しているがテーブルを取得したというエラーを出します。
org.luaj.vm2.LuaError: script:4 bad argument: userdata expected, got table
「this」の値はどちらの場合も同じ LuaTable ですが、メソッド registerEvent が CoerceJavaToLua.coerce(...) を介して追加されているため、実際に LuaVale が必要であることに気付くのではなく、Java オブジェクトが必要であると認識しています。
だから私の質問はこれです。Java と Lua の両方から同じ関数を使用できるようにする、これを回避するより良い方法はありますか? そして、ここまで読んでくれてありがとう:)