2010-07-30 17 views
7

Estoy tratando de extraer un cierre de una secuencia de comandos groovy. Yo defino el cierre como¿Cómo importar un cierre de groovy a java?

def printMe = {str ->println str} 

en mi archivo maravilloso, y luego trato de usarlo por el acaparamiento de que a partir de la unión de la siguiente manera:

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

Pero me sale el siguiente error cuando ejecuto esto.

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) 

¿Hay una manera de agarrar un cierre (o un método sencillo) a partir de un guión maravilloso?

Respuesta

9

¿Qué ocurre si omite el def de su declaración de cierre?

printMe = { str -> println str } 

Mediante el uso de DEF, creo que se convierte en la variable printMe local para el guión, en lugar de ir en la unión

Leer más sobre Scoping and the Semantics of "def"

+0

Hey gracias, que era perfecto. – brice