簡體   English   中英

如何從groovy導入一個閉包到java?

[英]How to import a closure from groovy to java?

我正試圖從一個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變量變為腳本的本地變量,而不是進入Binding

閱讀更多關於范圍和“def”的語義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM