Ich versuche, eine Lua-Funktion in einem Java-Programm mit LuaJ aufzurufen. Es funktioniert gut, wenn ich keine Argumente zur Schließung vorbei:Übergabe von Argumenten an eine Lua-Funktion mit 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();
Aber jetzt habe ich ein Lua Script mit einer Top-Level-Funktion bin versucht, die ein Argument nimmt und ich kann einfach nicht herausfinden, wie das Argument von Java übergeben. Hier ist, was ich bisher habe:
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"));
Dies führt zu einer Ausnahme auf der InvokeMethod Linie:
org.luaj.vm2.LuaError: attempt to index ? (a function value)
Vielen Dank für Ihre Hilfe!
Das scheint nicht zu sein. Ich bekomme genau den gleichen Fehler. Auch wenn das Skript irgendwie nicht korrekt war, sollte der Aufruf von LuaC.compile nicht fehlschlagen? – nerdinand