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+' '
}
闭包是一个代码块,用{}括起来。与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+' '
}
相关文章推荐
- Asp.net WebAPI 单元测试
- WEB前端--CSS样式优先级
- 2016SDAU编程练习二1020
- "围观"设计模式(1)--单一职责原则(SRP,Single Responsibility Principle)
- Bash中各种括号的使用
- (1)VMware虚拟机安装与创建虚拟机
- js一百零一夜之第十六夜之 javaScript 闭包函数
- Hystrix学习(5)HelloWorld
- python中的生成器
- c# Repeater 和 AspNetPager
- 夺命雷公狗ThinkPHP项目之----企业网站7之栏目的修改(主要用模型来验证字段)
- ASP.NET获取URL方法汇总
- Gson之注解
- APUE学习的经验(引以为戒)
- ionic 、ionic-image-lazy-load网络图片的懒加载和和加载效果,居中显示
- Shiro入门
- OC 通讯录 实现的方法
- ACdream 1112 Alice and Bob (SG函数+线性素数筛)
- Android学习(39) -- 关联jar包的源代码(两种方式)
- Linux含交互的自动登录脚本