简体   繁体   中英

How to import a closure from groovy to java?

I'm trying to extract a closure from a groovy script. I define the closure as

def printMe = {str ->println str}

in my groovy file, and then try to use it by grabbing it from the binding as follows:

GroovyScriptEngine gse = new GroovyScriptEngine(new String[] { "scripts" });
Binding binding = new Binding();
gse.run("test.groovy", binding);
Closure cls = (Closure) binding.getVariable("printMe");
cls.call("foo");

But I get the following error when I run this.

groovy.lang.MissingPropertyException: No such property: 
    printMe for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:55)
    at GroovyTry.main(GroovyTry.java:19)

Is there a way to grab a closure (or a plain method) from a groovy script?

What happens if you omit the def from your closure declaration?

printMe = { str -> println str }

By using def, I think the printMe variable becomes local to the script, rather than going in the Binding

Read more about Scoping and the Semantics of "def"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM