开发者

How to import a closure from groovy to java?

开发者 https://www.devze.com 2023-01-10 01:16 出处:网络
I\'m trying to extract a closure from a groovy script. I define the closure as def printMe = {str ->println str}

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"

0

精彩评论

暂无评论...
验证码 换一张
取 消