如何将闭包从groovy导入java?

如何将闭包从groovy导入java?,java,groovy,closures,embedded-language,Java,Groovy,Closures,Embedded Language,我试图从groovy脚本中提取一个闭包。我将闭包定义为 def printMe = {str ->println str} 在我的groovy文件中,然后尝试通过从绑定中获取它来使用它,如下所示: GroovyScriptEngine gse = new GroovyScriptEngine(new String[] { "scripts" }); Binding binding = new Binding(); gse.run("test.groovy", binding); Clos

我试图从groovy脚本中提取一个闭包。我将闭包定义为

def printMe = {str ->println str}
在我的groovy文件中,然后尝试通过从绑定中获取它来使用它,如下所示:

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");
但是当我运行这个时,我得到了以下错误

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)

有没有办法从groovy脚本中获取闭包(或普通方法)?

如果在闭包声明中省略
def
,会发生什么

printMe = { str -> println str }
通过使用def,我认为
printMe
变量成为脚本的局部变量,而不是绑定

阅读更多关于