from:http://attis-wong-163-com.iteye.com/blog/1239819
这篇文章介绍一下Closure的一些语法特性,以及它的使用方法,我们用规则以及代码的方法进行展现,和介绍MetaClass不同的是,这次我们将先列出规则,再贴上代码,让大家对所阐述的目标更加明确。
一、代码块(Blocking)
在介绍闭包前,先来讲几个Groovy中代码块的一些特性。
1.groovy的变量作用域和java相似,代码块内部声明的变量不能被外部访问调用。
2.对于Groovy Script, 用def定义的变量对binding.variables不可见。没有def等任何定义的可被binding.variable.参数名所访问。见代码:
- def c = 5
- assert c == d = 6
- assert d == 6 //def keyword optional because we're within a script context
- assert binding.variables.c == null
- assert binding.variables.d == //when def not used, variable becomes part of binding.variables
3.对于第一条规则,有个例外,当变量没有def等任何定义时,该变量全局有效。见代码:
try{
4.代码块可以嵌套,比如try代码块,这和Java是一样的。
二、闭包(Closures)
之前对代码块做了一些总结,这里言归正传,看看Groovy的闭包是多么的强大。
1. 闭包中可以包含代码逻辑,闭包中最后一行语句,表示该闭包的返回值,不论该语句是否冠名return关键字。如果c是无参数闭包,那么它的标准调用方法是c.call(),它的简洁调用方法是c()。见代码:
def a = 'coffee'