Как импортировать закрытие из Groovy в Java?
Я пытаюсь извлечь замыкание из отличного сценария. Я определяю закрытие как
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 ответ
Решение
Что произойдет, если вы опустите def
из вашего заявления о закрытии?
printMe = { str -> println str }
Используя def, я думаю, что printMe
переменная становится локальной для скрипта, а не в привязке
Узнайте больше о Scoping и семантике "def"