groovy 闭包

来源:互联网 发布:网易内测手游软件 编辑:程序博客网 时间:2024/05/16 23:36
      闭包(Closure)类似于 Java 语言中的匿名内部类。闭包和匿名内部类都是可执行的一段代码,不过这两者之间有一些细微的不同。状态是自动传入传出闭包的。闭包可以有名字。它们可以重复使用。而且,最重要且对 Groovy 同样成立的是,闭包远比匿名内部类要灵活得多!闭包用以下方法定义:
  1. {[comma-separated-Arguments-list ->] statements }

    闭包用“{}”括起,“->”前面是参数,后面是处理语句。

    闭包至少会有一个参数 “it”,它其实是参数表中的第一个参数,所以如果闭包定义中只有一个参数,可以省略不写,而使用缺省的参数“it”。对于没有参数定义的闭包,“it”的值就是 null 。

    闭包通过 call() 方法被调用。在底层,call() 方法实现了对闭包隐含的doCall()方法的调用。

    几个简单的例子:

  1. closure = { name ->               
  2.     println("hello ${name}"
  3. }closure.call("world!")
  1. closure = { greeting, name ->             
  2.     println(greeting + name) 
  3. }closure("hello ""world!")