2010-07-30 14 views
7

Ben groovy bir komut dosyasından bir kapatma ayıklamak çalışıyorum. Benim harika dosyasında Groovy'den java'ya nasıl kapatma yapılır?

def printMe = {str ->println str} 

olarak kapatılmasını tanımlamak ve sonra aşağıdaki gibi bağlayıcı onu kapma bunu kullanmayı deneyin:

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

Ama bu çalıştırdığınızda aşağıdaki hatayı alıyorum.

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) 

Bir groovy komut dosyasından kapatma (veya düz bir yöntem) almanın bir yolu var mı?

cevap

9

Kapanış bildiriminizden def'u atlarsanız ne olur? def kullanarak

printMe = { str -> println str } 

, ben printMe değişken yerine

+0

daha yaklaşık Scoping and the Semantics of "def" teşekkür Hey, bu spot Oku Bağlama

giderek daha senaryoya yerel hale geliyor. – brice