您的位置:首页 > 其它

groovy入门4 闭包简介

2016-04-23 15:12 204 查看
1 闭包
闭包是一个代码块,用{}括起来。与java不同的是,groovy中程序代码也成为一种数据,可以被一个变量所引用。
javascript中var f = function(){}
格式为
{ 参数->
代码
}
具体例子如下:
def clouser1 = {
println it //it默认参数
}
clouser1.call('zhang')

def closer2 = {
text ->
println text //一个参数
}
closer2('this is close2')

def closer3 = {
//多个参数
name,age->
println "This is ${name},${age} yeas old"
}
closer3('zhangsan',20)
额外说明:groovy的这种将代码块赋值给变量的做法和javascript也有像,不过javascript的写法是var f = function(){}
2 delegate
其实delegate和java中的上下文类似,delegate将指定待执行代码的对象。类似于java中
的代码:
interface Target{
void surf();
}
class Aoo implments Target{
public void surf(){
System.out.println("Aoo surfing");
}
}
class Boo implemets Target{

public void surf(){
System.out.println("Aoo surfing");
}
private Target target;
public Boo(){}
public Boo(Target target){
this.target = target;
}
public void invoke(){
target.surf();
}
}
groovy的delegate属性:
class Net{

def work = {
println 'Net is working'

}
def surf={
println 'Net is surfing'
}
}

class AdaptNet{

def work = {
println 'AdaptNet is working'
}
def surf ={
println 'AdaptNet is surfing'
}

def invoke(closer){
closer.delegate = new Net()
// closer.delegate = new AdaptNet()// close.surf将输出"AdaptNet is surfing"
closer.surf()//将输出'Net is surfing
work()
}
}

new AdaptNet().invoke{}
3闭包访问集合
def array =[1,2,3,4,5]
array.each{
print it+' '
}

def maps = [name:'s1',age:10,score:85]

maps.each{
data->
print data.key+':'+data.value+' '
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: