golang包循环依赖(Groovy 闭包_胖子的家_百度空间)
闭包
Groovy 中最令人兴奋和最强大的功能是支持闭包 。闭包(Closure)类似于 Java 语言中的匿名内部类 。闭包和匿名内部类都是可执行的一段代码 ,不过这两者之间有一些细微的不同 。状态是自动传入传出闭包的 。闭包可以有名字 。它们可以重复使用 。而且 ,最重要且对 Groovy 同样成立的是 ,闭包远比匿名内部类要灵活得多!闭包用以下方法定义:
闭包用“{} ”括起 ,“-> ”前面是参数 ,后面是处理语句 。下面的例子演示了如何定义并使用一个闭包 。第一个闭包演示了在字符串中使用参数的形式:${param};第二个闭包演示了多参数形式:用逗号隔离参数 。
有趣的是 ,闭包至少会有一个参数 “it ” ,它其实是参数表中的第一个参数 ,所以如果闭包定义中只有一个参数 ,可以省略不写 ,而使用缺省的参数“it ” 。对于没有参数定义的闭包 ,“it ”的值就是 null 。
例子 9 展示了闭包的强大功能 。新改进的 Dog 类包括一个 train 方法 ,它实际上执行创建了 Dog 实例的闭包。
在上面的例子里,我们还看到 ,闭包通过 call() 方法被调用 。(在底层 ,call() 方法实现了对闭包隐含的doCall()方法的调用) 。Groovy 中的大多数对象具有像 each 和 find 这样的以闭包为参数的方法。用闭包来迭代对象会产生几种令人兴奋的可能性:
其实就是:(你也许已经发现,可以用it代替x)
这里我们使用了一个 Groovy-Beta3 闭包定义 ,只是为了让您能看懂老版本Groovy的一些例子 。在新的Groovy JSR中对闭包的定义略有改动 ,因为 | 字符同时也是 Java 中的位操作符;Groovy JSR 建议使用 Nice (另外一种JRE语言)样式的 -> 分隔符代替它 。
这种以闭包为参数的代码在Groovy里十分普遍:
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!