Как импортировать закрытие от отличного до Java?

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

def printMe = {str ->println str}

в моем отличном файле, и затем пытаются использовать его путем захвата его от привязки следующим образом:

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)

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

7
задан brice 30 July 2010 в 10:10
поделиться

1 ответ

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

printMe = { str -> println str }

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

Подробнее о Области видимости и семантике «def»

9
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: