3

私たちのプロジェクトでは、可変数の引数を持つluaからjavaメソッドを呼び出そうとしています。したがって、javaメソッドのコードは次のようになります。

public static void addEvent( String luaFile, String function, 
                             int milliseconds, Object...args )
{
    events.add( new TimerEvent( luaFile, function, milliseconds, args ) );
}

このメソッドをluaファイルから次の行で呼び出したいと思います。

mgr:addEvent( "luaFile.lua", "doSomething", 3000, var )

しかし、Luajavaを使用すると、常にエラーが発生します。

PANIC: unprotected error in call to Lua API (Invalid method call. No such method.)

「var」引数を削除したり、引数を追加したりしても機能しません。

したがって、Luaファイルで変数引数を使用してjavaメソッドを使用したことがあり、この問題を解決する方法のヒントを教えてくれる人がいるかもしれません。ArrayListを作成し、引数を追加してこのArrayListをJavaメソッドに渡すために必要になるため、Luaファイルであまり多くのコード行を使用したくないだけです。したがって、配列としてJavaに渡すことができる配列を作成する簡単な方法もあるかもしれません。したがって、ソリューションは必ずしもvargsを使用する必要はありませんが、簡単な方法だと思いました。

事前に助けてくれてありがとう

4

3 に答える 3

1

varargs パラメーター (例: Object... args) は、実際には型Object[]です。

LUA (おそらく) は、varargs を認識して配列を動的に作成することができないため、これを試してください:

mgr:addEvent( "luaFile.lua", "doSomething", 3000, {var})
于 2012-03-06T22:44:44.177 に答える
1

残念ながら、Java 配列は現在 LuaJava ではサポートされていません。新しい Java 配列の作成は許可されず、配列を使用した操作 (値の取得と設定) はサポートされていません。したがって、Object... args構文をサポートできません。

0、1、2、3 個の引数を取る特殊なメソッドを使用することで、これを回避できます (3 個以上は必要ないと思います)。次に、適切な関数を呼び出す Lua vararg 関数を追加します。3 引数呼び出しの例:

public static void addEvent3( String luaFile, String function, 
                             int milliseconds, Object arg1, Object arg2, Object arg3 )
{
    events.add(new TimerEvent(luaFile, function, milliseconds, new Object[] {arg1, arg2, arg3}));
}
于 2012-03-08T19:43:44.280 に答える