给它的定义:

Closures are anonymous blocks of code that can accept parameters and can return a value. They can be assigned to variables and can be passed as parameters to methods.

匿名代码块;
可向它传入参数;
可被赋给变量;
自身可作为参数传递到方法中;

Closure square = {it * it
}
square 16

简单的Closure:

def myClosure = { println 'Hello world!' }
//execute our closure
myClosure()

接受一个参数的Closure:

def myClosure = {String str -> println str }
//execute our closure
myClosure('Hello world!')

一个参数时,在闭包内可以用it代替

def myClosure = {println it }
//execute our closure
myClosure('Hello world!')

接受多个参数

def myClosure = {String str, int num -> println "$str : $num" }
//execute our closure
myClosure('my string', 21)

参数类型是可选的,上面的还可以写成这样

def myClosure = {str, num -> println "$str : $num" }
//execute our closure
myClosure('my string', 21)

闭包可以引用创建它的上下文中的变量

def myVar = 'Hello World!'
def myClosure = {println myVar}
myClosure()

闭包的上下文Context可利用setDelegate()来切换

这个概念在后面会变的非常有用。

def myClosure = {println myVar}
MyClass m = new MyClass()
myClosure.setDelegate(m)
myClosure()class MyClass {def myVar = 'Hello from MyClass!'
}

在创建myClosure之时,myVar是不存在的,但在执行myClosure之前,将myClosure的context改变为MyClass

传递Closure参数

下面是方法中传递Closure参数的多重写法

接受一个参数

myMethod(myClosure)

如果只有一个参数,括号可省略

myMethod myClosure

in-line内联形式

myMethod {println 'Hello World'}

两个参数

myMethod(arg1, myClosure)

第二个参数为in-line形式

myMethod(arg1, { println 'Hello World' })

如果方法最后一个参数是闭包,那么可将其移出来

myMethod(arg1) { println 'Hello World' }

Groovy 之 Closure相关推荐

  1. groovy的Closure

    1.Closures的语法 格式语法:{ [closureParameters -> ] statements } { name -> println name } 2.Closures对 ...

  2. groovy之closure

    什么是闭包(Closure) 在Groovy中,闭包是一段匿名的代码段,它可以有参数,返回值,并且能够赋值给一个变量.闭包中使用的变量可以是在闭包外部定义的,也可以是在闭包内部定义的. 闭包定义的语法 ...

  3. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )

    文章目录 总结 一.静态闭包变量 1.执行普通闭包变量 2.执行静态闭包变量 二. 在闭包中定义闭包 三. 完整代码示例 总结 在闭包中 , 打印 this , owner , delegate , ...

  4. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )

    文章目录 总结 一.闭包类 Closure 简介 二.闭包类 Closure 中 this.owner.delegate 成员 源码分析 三.分析编译后的字节码文件内容 总结 在闭包中 , 打印 th ...

  5. Groovy Closure

    Closure - 闭包 在Java中的Lambda和Groovy的Closure非常相似,但是底层的实现机制是非常不同的. # 简单示例 对于一个「闭包」的简单使用如下: // 声明一个闭包 Clo ...

  6. Groovy Closure简介

    什么是闭包(Closure) 在Groovy中,闭包是一段匿名的代码段,它可以有参数,返回值,并且能够赋值给一个变量.闭包中使用的变量可以是在闭包外部定义的,也可以是在闭包内部定义的. 闭包定义的语法 ...

  7. Groovy中的闭包

    groovy中的一个核心语法:closurs,也叫闭包.闭包在groovy中是一个处于代码上下文中的开放的,匿名代码块.它可以访问到其外部的变量或方法. 1. 句法 1.1 定义一个闭包 { [clo ...

  8. 【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )

    文章目录 一.报错信息 二.解决方案 一.报错信息 定义 Groovy 函数 , void fun(object) {object.hello() } 如果传入的 实例对象 中 , 没有定义 hell ...

  9. 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )

    文章目录 前言 一.Groovy 中函数实参自动类型推断 二.函数动态参数注意事项 三.完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , ...

最新文章

  1. VR如何巧妙填补传统数据视觉化的漏洞
  2. escape sequence
  3. 关于source insight 置顶窗口或者处于前台挡住窗口解决办法
  4. 视音频数据处理入门:AAC音频码流解析
  5. kmeans算法中的sse_聚类算法入门:k-means
  6. python 整数输出 d f_pythn print格式化输出---------%s 和 % d 都是什么意思?
  7. Android4.0 添加一个新的Android 键值
  8. 可以同时开发php Java_php可以和java一起开发吗
  9. Mybatis框架相关知识讲解
  10. Ubuntu Server 命令行下显示中文乱码(菱形)解决办法
  11. 国军标--Gjb软件需求规格说明书模板
  12. 禁止百度云盘p2p后台上传
  13. masm32v12编译器自带库masm32.lib在nasm中的使用。
  14. 分段插值法 | 分段线性插值 + 分段抛物插值
  15. R笔记3:ggplot绘制商务图表…
  16. bzoj 3717 [PA2014]Pakowanie
  17. python信用卡识别_在python中验证信用卡号码
  18. 解决告警“warning #1295-D Deprecated declaration xxxxxxx - give arg types”方法
  19. Oracle导入dmp 文件
  20. C#读取Excel日期时间

热门文章

  1. spring 整合websoket(整理)
  2. react-router的基础知识
  3. php生成sitemap
  4. Asp.net Web.Config - 配置元素customErrors
  5. 等概率随机函数的实现
  6. 安装Maya 6.5指南
  7. Tomcat日志中文乱码问题解决
  8. linux su和sudo命令的区别(转)
  9. 软件工程阅读作业感想
  10. Sqlserver2005 with as 实现分页以提高性能