2010-07-30 9 views
7

Ich versuche, eine Schließung von einem groovigen Skript zu extrahieren. Ich sehe die Schließung alsWie man eine Schließung von groovy nach Java importiert?

def printMe = {str ->println str} 

in meiner groovy-Datei, und dann versuchen, es zu verwenden, indem sie aus der Bindung greifen wie folgt:

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

Aber ich bekomme die folgende Fehlermeldung, wenn ich dies auszuführen.

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) 

Gibt es eine Möglichkeit, eine Schließung (oder eine einfache Methode) von einem groovigen Skript zu ergreifen?

Antwort

9

Was passiert, wenn Sie die def aus Ihrer Abschlusserklärung weglassen?

printMe = { str -> println str } 

von def verwenden, ich denke, die printMe Variable an das Skript lokale wird, anstatt in der Bindung

Lesen Sie mehr über Scoping and the Semantics of "def"

+0

Hey Dank geht, dass war genau richtig. – brice