Как импортировать закрытие из Groovy в Java? - PullRequest
7 голосов
/ 30 июля 2010

Я пытаюсь извлечь замыкание из отличного сценария. Я определяю закрытие как

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)

Есть ли способ получить замыкание (или простой метод) из отличного сценария?

1 Ответ

9 голосов
/ 30 июля 2010

Что произойдет, если вы опустите def в своем объявлении о закрытии?

printMe = { str -> println str }

Используя def, я думаю, что переменная printMe становится локальной для скрипта, а не входит в Binding

Подробнее о Области применения и семантика "def"

...