2010-07-30 18 views
7

Próbuję wyodrębnić zamknięcie z groovy skryptu. I zdefiniować ZamknięcieJak zaimportować zamknięcie z groovy do java?

def printMe = {str ->println str} 

w moim porywające pliku, a następnie spróbuj użyć go chwytając go od wiązania się następująco:

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"); 

Ale pojawia się następujący komunikat o błędzie podczas uruchamiania tego.

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) 

Czy istnieje sposób, aby złapać zamknięcie (lub zwykłą metodę) z groovy skryptu?

Odpowiedz

9

Co się stanie, jeśli pominięto def z deklaracji zamknięcia?

printMe = { str -> println str } 

Korzystając def, myślę, że zmienna printMe staje się lokalny do skryptu, a nie będzie w wiązaniu

Więcej o Scoping and the Semantics of "def"

+0

Hej, dzięki, że był na miejscu. – brice