【问题标题】:How to import a closure from groovy to java?如何将一个闭包从groovy导入java?
【发布时间】:2011-03-23 04:15:28
【问题描述】:

我正在尝试从 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 脚本中获取闭包(或普通方法)?

【问题讨论】:

    标签: java groovy closures embedded-language


    【解决方案1】:

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

    printMe = { str -> println str }
    

    通过使用 def,我认为 printMe 变量成为脚本的本地变量,而不是进入 Binding

    阅读更多关于Scoping and the Semantics of "def"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多