Próbuję wywołać funkcję lua w programie Java za pomocą LuaJ. To działa dobrze, gdy nie mam żadnych argumentów przechodząc do zamknięcia:Podawanie argumentów funkcji lua z luaj
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();
Ale teraz staram skrypt lua z funkcją najwyższego poziomu, który przyjmuje argument, a ja po prostu nie może dowiedzieć się, w jaki sposób przekazać argument z Javy. Oto co mam do tej pory:
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"));
Powoduje to wyjątek na linii invokemethod:
org.luaj.vm2.LuaError: attempt to index ? (a function value)
Dzięki za pomoc!
To chyba nie jest to. Otrzymuję dokładnie ten sam błąd. Ponadto, jeśli skrypt nie był w jakiś sposób poprawny, czy nie powinno zadzwonić połączenie LuaC.compile? – nerdinand