我正试图从一个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脚本中获取闭包(或普通方法)?
1 回答
如果从闭包声明中省略
def
会发生什么?通过使用def,我认为
printMe
变量成为脚本的本地变量,而不是进入Binding了解更多关于Scoping and the Semantics of "def"