Trong Groovy Closures - Formal Definition, nó chỉ được gọi là "Chuyển các đóng cửa thành phương pháp".
Groovy có trường hợp đặc biệt để xác định bao đóng là đối số phương pháp để làm cho cú pháp đóng cửa dễ đọc hơn. Cụ thể, nếu đối số cuối cùng của một phương thức thuộc loại Closure, bạn có thể gọi phương thức với một khối đóng kín bên ngoài dấu ngoặc đơn. Ví dụ, nếu một lớp học có một phương pháp:
class SomeCollection {
public void each (Closure c)
}
Sau đó, bạn có thể gọi each() với một định nghĩa đóng cửa bên ngoài ngoặc:
SomeCollection stuff = new SomeCollection();
stuff.each() { println it }
Cú pháp truyền thống cũng có sẵn, và cũng có thể lưu ý rằng trong Groovy bạn có thể tách biệt dấu ngoặc đơn trong nhiều trường hợp, do đó, hai biến thể này cũng hợp pháp:
SomeCollection stuff = new SomeCollection();
stuff.each { println it } // Look ma, no parens
stuff.each ({ println it }) // Strictly traditional
Quy tắc tương tự áp dụng ngay cả khi phương pháp có các đối số khác. Hạn chế duy nhất là lập luận Đóng cửa phải làm người rốt:
class SomeCollection {
public void inject (x, Closure c)
}
stuff.inject(0) { count, item -> count + item } // Groovy
stuff.inject(0, { count, item -> count + item }) // Traditional
Đó có thể không liên quan đến "Câu hỏi Groovy", nhưng ví dụ như trong Scala, điều này "hình thức" là một trường hợp đặc biệt của function currying:
scala> def fun[A, B](a: A)(b: B) = {true}
fun: [A, B](a: A)(b: B)Boolean
scala> fun(1){2}
res59: Boolean = true
Bạn nghĩ gì về câu trả lời [@mgryszko] (http://stackoverflow.com/a/10093625/462015) –
@Arturo: tôi đã nghĩ về phương thức mẫu nhất thiết liên quan đến thừa kế, nơi mà chiến lược là một thay thế cho nó, chứ không phải một hình thức của nó. http://tech.puredanger.com/2007/07/03/pattern-hate-template/ –
Bạn nghĩ gì về [câu trả lời của riêng tôi] (http://stackoverflow.com/a/10306434/462015)? –