LuaJ を使用して Java プログラムで lua 関数を呼び出そうとしています。クロージャーに引数を渡していない場合は正常に機能します。
String script = "print 'Hello World!'";
InputStream input = new ByteArrayInputStream(script.getBytes());
Prototype prototype = LuaC.compile(input, "script");
LuaValue globals = JsePlatform.standardGlobals();
LuaClosure closure = new LuaClosure(prototype, globals);
closure.call();
しかし今、私は引数を取る最上位の関数で lua スクリプトを試していますが、Java から引数を渡す方法がわかりません。これが私がこれまでに得たものです:
String script = "function something(argument)\n"+
"test_string = 'Hello World!'\n"+
"print(test_string)\n"+
"print(argument)\n"+
"end";
InputStream input = new ByteArrayInputStream(script.getBytes());
Prototype prototype = LuaC.compile(input, "script");
LuaValue globals = JsePlatform.standardGlobals();
LuaClosure closure = new LuaClosure(prototype, globals);
closure.invokemethod("something", CoerceJavaToLua.coerce("Foo"));
これにより、invokemethod 行で例外が発生します。
org.luaj.vm2.LuaError: インデックスを作成しようとしていますか? (関数値)
ご協力いただきありがとうございます!