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 meth开发者_StackOverflow中文版od) 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"
精彩评论