2010-07-30 31 views
7

Tôi đang cố gắng trích xuất một đóng cửa từ một tập lệnh hấp dẫn. Tôi xác định việc đóng cửa nhưLàm thế nào để nhập một đóng cửa từ groovy sang java?

def printMe = {str ->println str} 

trong tập tin groovy của tôi, và sau đó cố gắng sử dụng nó bằng cách lấy nó ra khỏi ràng buộc như sau:

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

Nhưng tôi nhận được lỗi sau khi tôi chạy này.

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) 

Có cách nào để lấy một đóng (hoặc một phương thức đơn giản) từ tập lệnh hấp dẫn không?

Trả lời

9

Điều gì sẽ xảy ra nếu bạn bỏ qua số def khỏi tuyên bố đóng cửa của mình?

printMe = { str -> println str } 

Bằng cách sử dụng def, tôi nghĩ biến printMe trở thành địa phương để các kịch bản, thay vì đi trong Binding

Đọc thêm về Scoping and the Semantics of "def"

+0

Hey cảm ơn, đó là vị trí trên. – brice

Các vấn đề liên quan