Sto provando a chiamare una funzione lua in un programma Java utilizzando LuaJ. Funziona bene quando non sto passando alcun argomento alla chiusura:Passare argomenti a una funzione lua con 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();
Ma ora sto cercando uno script lua con una funzione di primo livello, che prende un argomento e io non riesco a capire come passare l'argomento da Java. Ecco quello che ho ottenuto finora:
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"));
Ciò si traduce in un'eccezione sulla linea InvokeMethod:
org.luaj.vm2.LuaError: attempt to index ? (a function value)
Grazie per il vostro aiuto!
Quello non sembra essere quello. Sto ottenendo lo stesso identico errore. Inoltre, se lo script non fosse corretto in qualche modo, la chiamata a LuaC.compile non dovrebbe già fallire? – nerdinand