groovy的Closure

本文详细介绍了Groovy的Closure,包括语法、对象调用、参数类型、委托策略以及函数编程的相关概念,如Currying、结果缓存、Closure组合和递归转化。通过对Closure的深入理解,可以更好地掌握Groovy编程技巧。
摘要由CSDN通过智能技术生成

1.Closures的语法

格式语法:{ [closureParameters -> ] statements }

{ name -> println name }

 2.Closures对象和调用

Closures是一个对象(groovy.lang.Closure),是一个匿名代码块,类似于javascript的箭头函数,例子如下

def demo = {
    it -> println it
}

 def 后紧跟着名称,这名称也是方法名,类似定义一个变量。

Closures调用方式如下

demo(xxx);
demo.call(xxx);

 xxx是需要传的参数

3.Closures的参数

Closures的参数分为3种,分别为正常参数,隐式参数和可变参数

1)正常参数

有三个特性,1.类型可选,2.参数名,3.默认值(可选)

例子如下:

def numAdd = { // 类型,默认值
    int a, int b=2 -> a+b 
} 

def numAdd2 = { // 无类型,默认值
    a,b=2 -> a+b
}

def numAdd2 = { // 无类型
     a,b -> a+b 
}
def numAdd3 = { // 有类型
     int a, int b -> a+b 
}

2)隐式参数

隐式参数:it,这个it指代是传入的参数 

代码如下:

def greeting = { it -> "Hello, $it!" }
assert greeting('Patrick') == 'Hello, Patrick!'
// it代表传入的参数

 3)可变参数

可变参数与java的可变参数一样,格式如下:type... name

例子如下

def concat1 = { String... args -> args.join('') }           
assert concat1('abc','def') == 'abcdef'                     
def concat2 = { String[] args -> args.join('') }            
assert concat2('abc', 'def') == 'abcdef'

4.委托策略

1)Closure的this指代的是什么?

在官网文档中有这样一句话

this corresponds to the enclosing class where the closure is defined

大概意思,this对应的定义closure的闭包类(最近的)而且只能是类不能是closure,这个不论是内部类还是外部类;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值