Java – use luaj to pass parameters to Lua functions

I'm trying to use LuaJ to call Lua function in Java program. It works when I don't pass any parameters to the closure:

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();

But now I'm trying a Lua script with a top-level function that accepts a parameter, and I can't figure out how to pass in parameters from Java That's what I've got so far:

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,globals);
closure.invokemethod("something",CoerceJavaToLua.coerce("Foo"));

This causes an exception in the invoke method line:

Thanks for your help!

Solution

In Lua, the top-level scope is an anonymous function with variable parameters These are accessed using In your example, you don't need a function named something. The block itself can be used as an unnamed function

For example, this code is in luaj-3.0-beta 1

String script = "argument = ...\n"+
 "test_string = 'Hello World!'\n"+
 "print(test_string)\n"+
 "print(argument)\n";

Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.loadString(script,"myscript");
chunk.call( LuaValue.valueOf("some-arg-value") );

Made this result for me:

Hello World!
some-arg-value

You can pass any number of parameters in this way

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>